рельсы 3: разница между write_attribute и update_attribute - PullRequest
13 голосов
/ 28 мая 2011

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

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

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

Ответы [ 2 ]

15 голосов
/ 28 мая 2011

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

12 голосов
/ 28 мая 2011

write_attribute используется, когда вы хотите перезаписать методы доступа по умолчанию для метода. Это по сути синтаксический сахар для self[:attribute]=(value).

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...