Rails: update_attribute против update_attributes - PullRequest
246 голосов
/ 06 мая 2010
Object.update_attribute(:only_one_field, "Some Value")
Object.update_attributes(:field1 => "value", :field2 => "value2", :field3 => "value3")

Оба они будут обновлять объект без явного указания AR обновлять.

Rails API говорит:

для атрибута обновления

Обновляет отдельный атрибут и сохраняет запись, не проходя обычную процедуру проверки. Это особенно полезно для логических флагов на существующих записях. Обычный метод update_attribute в Base заменяется этим при смешивании модуля валидации, что по умолчанию.

для атрибутов обновления

Обновляет все атрибуты из переданного хэша и сохраняет запись. Если объект недействителен, сохранение не удастся и будет возвращено false.

Так что, если я не хочу проверять объект, я должен использовать update_attribute. Что если у меня будет это обновление для before_save, будет ли это переполнение стека?

Мой вопрос: update_attribute также обходит перед сохранением или только проверку.

Кроме того, каков правильный синтаксис для передачи хеша в update_attributes ... посмотрите мой пример вверху.

Ответы [ 11 ]

1 голос
/ 06 мая 2010

Я думаю, что ваш вопрос, если наличие атрибута update_attribute в before_save приведет к бесконечному циклу (вызовов update_attribute в обратных вызовах before_save, первоначально инициированных вызовом update_attribute)

Я почти уверен, что он обходит обратный вызов before_save, так как фактически не сохраняет запись. Вы также можете сохранить запись, не вызывая проверки, используя

Model.save false

...