Spec-Zone.ru › Ruby on Rails 7.2

модуль ActiveRecord::AttributeMethods::Dirty

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

Методы публичного экземпляра

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

Возвращает исходное значение атрибута до последней сохранения.

Этот метод полезен в обратных вызовах после сохранения для получения исходного значения атрибута до сохранения, которое вызвало выполнение обратных вызовов. Его можно вызвать как 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

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

Этот метод полезен при валидации и обратных вызовах перед сохранением, чтобы увидеть изменение атрибута, которое произойдёт при сохранении записи. Его можно вызвать как 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

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

Этот метод полезен при валидации и обратных вызовах перед сохранением, чтобы увидеть исходное значение атрибута до любых изменений, которые будут сохранены. Его можно вызвать как 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

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

Этот метод полезен в после сохранения, чтобы увидеть изменение атрибута во время сохранения, которое вызвало выполнение обратных вызовов. Его можно вызвать как 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

Изменился ли этот атрибут при последнем сохранении?

Этот метод полезен в после сохранения для определения, был ли атрибут изменён во время сохранения, которое вызвало выполнение обратных вызовов. Его можно вызвать как 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

Изменится ли этот атрибут при следующем сохранении?

Этот метод полезен в валидациях и обратных вызовах до сохранения, чтобы определить, изменит ли следующий вызов к 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