Подтвердить что ты не робот

Rails 3: разница между write_attribute и update_attribute

Я не знал о write_attribute до сегодняшнего дня...

он выглядит как update_attribute, хотя не вызывающая проверка по-прежнему вызывает: before_save обратные вызовы, тогда как write_attribute не делает.

Разница между этими двумя методами?

4b9b3361

Ответ 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).

Посмотрите ActiveRecord:: Base документацию под заголовком "Перезаписывание аксессуаров по умолчанию".

Если вы попытались переписать пример в документации с помощью update_attribute, я бы предположил, что это закончится в цикле.