2012-12-16 6 views
10

Quando si utilizza il completamento automatico nella console, vedo spesso "_was" postposto ai miei attributi. Ma non riesco a trovare alcuna documentazione o best practice per l'utilizzo. Che cosa fa e come dovrebbe essere usato?Qual è l'attributo del metodo ActiveModel "_was" utilizzato?

Esempio: user.fname ha il metodo user.fname_was

Utilizzando source_location, ho attribuito la cosa a:. Active_model/attribute_methods.rb", la linea 296 ma non c'è niente di specifico

risposta

29

Questo è un parte di ActiveModel :: sporco potete vederlo qui https://github.com/rails/rails/blob/af64ac4e5ce8406137d5520fa88e8f652ab703e9/activemodel/lib/active_model/dirty.rb#L146 Esempio

person = Person.find_by_name('Uncle Bob') 
person.changed?  # => false 

Cambiare il nome:

person.name = 'Bob' 
person.changed?  # => true 
person.name_changed? # => true 

#method _was return prev attribute value 
person.name_was # => 'Uncle Bob' 
person.name_change # => ['Uncle Bob', 'Bob'] 
person.name = 'Bill' 
person.name_change # => ['Uncle Bob', 'Bill'] 
+0

Grande, grazie! Come sapevi dove cercarlo? – beeudoublez

+3

ci stavo giocando solo pochi mesi fa, stavo scavando nel codice sorgente – Fivell

+2

Vorrei anche notare che chiamare 'person.save!' Resetterà 'name_was' per essere uguale al nuovo' name' –