Rails 3: разница между write_attribute и update_attribute
Я не знал о write_attribute до сегодняшнего дня...
он выглядит как update_attribute, хотя не вызывающая проверка по-прежнему вызывает: before_save обратные вызовы, тогда как write_attribute не делает.
Разница между этими двумя методами?
Ответ 1
update_attribute фактически выполняет физический вызов БД. Вы получаете полное выполнение инструкции UPDATE. Это как update_attributes, но только для одного столбца.
Пока write_attribute записывает атрибут для назначения в модель для столбцов, основанных на AR. Если вы должны перезаписать атрибут базы данных.
def first_name=(val)
write_attribute :first_name, val
end
# some_model.first_name => 'whatever val is'
def first_name=(val)
@first_name = val
end
# some_model.first_name => nil
Я не рассматривал write_attribute экстенсивно, но я понимаю, что модели на основе Activerecord обрабатывают назначения столбцов на основе db немного иначе, чем ваш запуск аксессуара мельницы.
Ответ 2
write_attribute используется, если вы хотите перезаписать устройства доступа по умолчанию для метода. Это по существу синтаксический сахар для self[:attribute]=(value).