module ActiveRecord::AttributeMethods::Dirty
Методы атрибутов Active Record: отслеживание изменений
Предоставляет возможность отслеживать изменения в моделях 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
Возвращает исходное значение атрибута до последнего сохранения.
Этот метод полезен в обратных вызовах after, чтобы получить исходное значение атрибута до сохранения, которое вызвало выполнение обратных вызовов. Его можно вызвать как 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
Возвращает изменение атрибута, которое будет сохранено при следующем сохранении.
Этот метод полезен при проверках и в обратных вызовах before, чтобы увидеть изменение атрибута, которое произойдёт при сохранении записи. Его можно вызвать как 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
Возвращает значение атрибута в базе данных, в отличие от значения в памяти, которое будет сохранено при следующем сохранении записи.
Этот метод полезен при проверках и в обратных вызовах before, чтобы увидеть исходное значение атрибута до любых изменений, которые будут сохранены. Его можно вызвать как 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
Возвращает изменение атрибута при последнем сохранении. Если атрибут был изменён, результатом будет массив, содержащий исходное и сохранённое значения.
Этот метод полезен в обратных вызовах after, чтобы увидеть изменение атрибута при сохранении, которое вызвало выполнение обратных вызовов. Его можно вызвать как 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
Изменился ли этот атрибут при последнем сохранении?
Этот метод полезен в обратных вызовах after, чтобы определить, изменился ли атрибут при сохранении, которое вызвало выполнение обратных вызовов. Его можно вызвать как 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
Изменится ли этот атрибут при следующем сохранении?
Этот метод полезен при проверках и в обратных вызовах before, чтобы определить, изменит ли следующий вызов 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.