модуль ActiveRecord::AttributeMethods::Dirty
Методы атрибутов Active Record Dirty
Обеспечивает возможность отслеживания изменений в ваших моделях Active Record. Добавляет все методы из ActiveModel::Dirty и добавляет методы, специфичные для базы данных.
Новый созданный Person объект не изменён:
class Person < ActiveRecord::Base end person = Person.create(name: "Alisson") person.changed? # => false
Изменить имя:
person.name = 'Alice'
person.name_in_database # => "Allison"
person.will_save_change_to_name? # => true
person.name_change_to_be_saved # => ["Allison", "Alice"]
person.changes_to_save # => {"name"=>["Allison", "Alice"]}
Сохранить изменения:
person.save person.name_in_database # => "Alice" person.saved_change_to_name? # => true person.saved_change_to_name # => ["Allison", "Alice"] person.name_before_last_change # => "Allison"
Аналогично ActiveModel::Dirty, методы могут быть вызваны как saved_change_to_name? или путём передачи аргумента универсальному методу saved_change_to_attribute?("name").
Публичные методы экземпляра
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 108 def attribute_before_last_save(attr_name) mutations_before_last_save.original_value(attr_name.to_s) end
Возвращает исходное значение атрибута до последней сохранения.
Этот метод полезен в после-обработчиках, чтобы получить исходное значение атрибута до сохранения, которое вызвало выполнение обработчиков. Его можно вызвать как name_before_last_save вместо attribute_before_last_save("name").
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 152 def attribute_change_to_be_saved(attr_name) mutations_from_database.change_to_attribute(attr_name.to_s) end
Возвращает изменение атрибута, которое будет сохранено при следующем сохранении.
Этот метод полезен при валидации и обработчиках до сохранения, чтобы увидеть изменение атрибута, которое произойдёт при сохранении записи. Его можно вызвать как name_change_to_be_saved вместо attribute_change_to_be_saved("name").
Если атрибут изменится, результат будет массивом, содержащим исходное значение и новое значение, которое будет сохранено.
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 164 def attribute_in_database(attr_name) mutations_from_database.original_value(attr_name.to_s) end
Возвращает значение атрибута в базе данных, в отличие от значения в памяти, которое будет сохранено при следующем сохранении записи.
Этот метод полезен при валидации и обработчиках до сохранения, чтобы увидеть исходное значение атрибута до любых изменений, которые будут сохранены. Его можно вызвать как name_in_database вместо attribute_in_database("name").
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 191 def attributes_in_database mutations_from_database.changed_values end
Возвращает хеш атрибутов, которые изменятся при следующем сохранении записи.
Ключи хеша — имена атрибутов, а значения — исходные значения атрибутов в базе данных (в отличие от значений в памяти, которые будут сохранены).
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 181 def changed_attribute_names_to_save mutations_from_database.changed_attribute_names end
Возвращает массив имён атрибутов, которые изменятся при следующем сохранении записи.
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 175 def changes_to_save mutations_from_database.changes end
Возвращает хеш, содержащий все изменения, которые будут сохранены при следующем сохранении.
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 169 def has_changes_to_save? mutations_from_database.any_changes? end
Будет ли следующий вызов save содержать какие-либо изменения для сохранения?
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 63
def reload(*)
super.tap do
@mutations_before_last_save = nil
@mutations_from_database = nil
end
end reload запись и очищает изменённые атрибуты.
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 98 def saved_change_to_attribute(attr_name) mutations_before_last_save.change_to_attribute(attr_name.to_s) end
Возвращает изменение атрибута во время последней сохранения. Если атрибут был изменён, результат будет массивом, содержащим исходное значение и сохранённое значение.
Этот метод полезен в обработчиках после сохранения, чтобы увидеть изменения в атрибуте во время сохранения, которое вызвало выполнение обработчиков. Его можно вызвать как saved_change_to_name вместо saved_change_to_attribute("name").
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 86 def saved_change_to_attribute?(attr_name, **options) mutations_before_last_save.changed?(attr_name.to_s, **options) end
Изменился ли этот атрибут при последнем сохранении?
Этот метод полезен в обработчиках после сохранения, чтобы определить, был ли атрибут изменён во время сохранения, которое вызвало выполнение обработчиков. Его можно вызвать как saved_change_to_name? вместо saved_change_to_attribute?("name").
Параметры
-
from -
Если указано, этот метод вернёт false, если исходное значение не равно заданному значению.
-
to -
Если указано, этот метод вернёт false, если значение не будет изменено на заданное значение.
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 118 def saved_changes mutations_before_last_save.changes end
Возвращает хэш, содержащий все изменения, которые только что были сохранены.
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 113 def saved_changes? mutations_before_last_save.any_changes? end
Были ли изменения в последнем вызове save?
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 138 def will_save_change_to_attribute?(attr_name, **options) mutations_from_database.changed?(attr_name.to_s, **options) end
Изменится ли этот атрибут при следующем сохранении?
Этот метод полезен в валидаторах и обработчиках до сохранения, чтобы определить, изменит ли следующий вызов save определённый атрибут. Его можно вызвать как will_save_change_to_name? вместо will_save_change_to_attribute?("name").
Параметры
-
from -
Если указано, этот метод вернёт false, если исходное значение не равно заданному значению.
-
to -
Если указано, этот метод вернёт false, если значение не будет изменено на заданное значение.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.