Для чего используется атрибут метода ActiveModel _?

При использовании автозаполнения в консоли я часто вижу, что «_was» добавляется к моим атрибутам. Но я не могу найти никакой документации или рекомендаций по использованию. Что он делает и как его следует использовать?

Пример: user.fname имеет метод user.fname_was

Используя source_location, я отследил его до: active_model/attribute_methods.rb", строка 296, но там нет ничего конкретного.


person beeudoublez    schedule 16.12.2012    source источник


Ответы (1)


Это часть ActiveModel::Dirty. Вы можете увидеть это здесь https://github.com/rails/rails/blob/af64ac4e5ce8406137d5520fa88e8f652ab703e9/activemodel/lib/active_model/dirty.rb#L146 Пример

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

Изменить имя:

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']
person Fivell    schedule 16.12.2012
comment
просто играл с ним несколько месяцев назад, я копался в исходном коде - person Fivell; 17.12.2012
comment
Я также хотел бы отметить, что вызов person.save! сбросит name_was, чтобы он был таким же, как новый name. - person Andy Ray; 10.08.2017