Spec-Zone.ru › Ruby on Rails 7.1

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

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

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

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 запись и очищает изменённые атрибуты.

Вызывает метод суперкласса
END_OF_DOCUMENT_MARKER
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