модуль ActiveRecord::AttributeMethods::Dirty
Методы атрибутов Active Record Dirty
Предоставляет способ отслеживания изменений в ваших моделях Active Record. Он добавляет все методы из ActiveModel::Dirty и добавляет методы, специфичные для базы данных.
Новый созданный Person объект не изменён:
class Person < ActiveRecord::Base end person = Person.create(name: "Allison") 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_save # => "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.