2010-09-21 17 views

Odpowiedz

10

Biorąc pod uwagę, że w twoim pytaniu nie ma zbyt wielu szczegółów, zakładam, że odnosisz się do obiektów ActiveRecord. Aby zobaczyć zmienione atrybuty na tak zwanych „brudnych przedmiotów”, można wykonać następujące czynności:

User.changed #=> ["name", "email"] 

User.changes #=> { "name" => ["Joe", "Joseph"] } 

Istnieją również metody dla każdego atrybutu, jeśli trzeba sprawdzić szczegółowych.

User.name_changed? #=> true 

User.name_change #=> ["Joe", "Joseph"] 

Więcej szczegółów tutaj: http://ryandaigle.com/articles/2008/3/31/what-s-new-in-edge-rails-dirty-objects

+0

(rdb: 118) self.misc1_id_changed? true (rdb: 118) self.misc1_id_change [5, 5] .. Dlaczego pojawia się jako zmieniony nie ma żadnych zmian w wartościach .. –

+0

Jeśli wartości są takie same, atrybut nie powinien być oznaczony jako ch anged. Jakie modyfikacje wprowadzasz do obiektu przed sprawdzeniem, co się zmieniło? – Sidane

+0

Po aktualizacji przekazuję wartości z mojego formularza. Modyfikuję tylko jeden atrybut. Jednak otrzymuję wszystkie wartości atrybutów zmieniły się prawdziwe. Chcę ustawić warunek przy aktualizacji. Użytkownik może modyfikować tylko niektóre atrybuty. Jeśli użytkownik zaktualizuje inne atrybuty, niż chcę zwrócić błędy. Jednak uzyskanie wszystkich atrybutów jako zmienionych, jeśli atrybuty nie zostaną zmienione. I pokazuje te same wartości. –

0

Tak ActiveRecord: Brudne, jednak nie widać zmian w obiektach zapisanych do DB, takich jak user.save :(

+0

Można to osiągnąć za pomocą czegoś takiego jak papertrail https://github.com/airblade/paper_trail –

Powiązane problemy