Spec-Zone.ru › Ruby on Rails 8.1

module ActiveRecord::AttributeMethods::Dirty

Подключенные модули:
ActiveModel::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").

Открытые методы экземпляра

attribute_before_last_save (attr_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").

attribute_change_to_be_saved (attr_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").

Если атрибут будет изменён, результатом будет массив, содержащий исходное значение и новое значение, которое будет сохранено.

attribute_in_database (attr_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").

attributes_in_database () Показать исходный код
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 191
def attributes_in_database
  mutations_from_database.changed_values
end

Возвращает хеш атрибутов, которые изменятся при следующем сохранении записи.

Ключи хеша — имена атрибутов, а значения хеша — исходные значения атрибутов в базе данных (в отличие от значений в памяти, которые будут сохранены).

changed_attribute_names_to_save () Показать исходный код
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 181
def changed_attribute_names_to_save
  mutations_from_database.changed_attribute_names
end

Возвращает массив имён атрибутов, которые изменятся при следующем сохранении записи.

changes_to_save () Показать исходный код
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 175
def changes_to_save
  mutations_from_database.changes
end

Возвращает хеш, содержащий все изменения, которые будут сохранены при следующем сохранении.

has_changes_to_save? () Показать исходный код
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 169
def has_changes_to_save?
  mutations_from_database.any_changes?
end

Будут ли какие-либо изменения сохранены при следующем вызове save?

reload (*) Показать исходный код
# 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 запись и очищает изменённые атрибуты.

Вызывает метод суперкласса
saved_change_to_attribute (attr_name) Показать исходный код
# 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").

saved_change_to_attribute? (attr_name, **options) Показать исходный код
# 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, только если значение будет изменено на заданное значение.

saved_changes () Показать исходный код
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 118
def saved_changes
  mutations_before_last_save.changes
end

Возвращает хеш со всеми только что сохранёнными изменениями.

saved_changes? () Показать исходный код
# File activerecord/lib/active_record/attribute_methods/dirty.rb, line 113
def saved_changes?
  mutations_before_last_save.any_changes?
end

Были ли изменения при последнем вызове save?

will_save_change_to_attribute? (attr_name, **options) Показать исходный код
# 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API