Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")
Обидва вони будуть оновлювати об'єкт, не вимагаючи явного вказівки AR для оновлення.
API Rails говорить:
для update_attribute
Оновляється один атрибут і зберігається запис, не проходячи звичайну процедуру перевірки. Це особливо корисно для булевих прапорів на існуючих записах. Метод регулярного update_attribute в Base замінюється цим, коли змішується модуль перевірки, який є за замовчуванням.
для update_attributes
Оновляє всі атрибути з переданого Hash і зберігає запис. Якщо об'єкт недійсний, збереження не вдасться, а помилка повернеться.
Тож якщо я не хочу перевіряти об'єкт, я повинен використовувати update_attribute. Що робити, якщо у мене є це оновлення на файлі before_save, чи воно буде stackoverflow?
Моє запитання полягає в тому, чи update_attribute також обходить попереднє збереження або просто перевірку.
Крім того, який правильний синтаксис для передачі хеша для update_attributes ... ознайомтеся з моїм прикладом вгорі.
before_save
зворотного дзвінка). Фе замість update_attribute(:discount, 0.1) if amount > 100
вас міг зробити discount = 0.1 if amount > 100
. update_attribute
викликає save
об'єкт, що в цьому випадку непотрібне, оскільки оператор знаходиться всередині before_save
зворотного дзвінка і все одно буде збережений. Сподіваюся, це має сенс.
update_attribute
заяву всерединуbefore_save
зворотного дзвінка? Я не можу придумати для цього вагомих причин.