2015-04-08 3 views
4

Я пытаюсь обновить атрибуты объекта после определенного действия. Если я использую update_attribute, все правильно сохраняет db, но у меня есть много вещей, которые мне нужно обновить, поэтому он становится очень повторяющимся.update_attribute vs update_attributes Rails 4

Это прекрасно работает:

order.update_attribute(:order_completed, "true") 
order.update_attribute(:stripe_email, params[:stripeEmail]) 

Однако, когда я пытаюсь использовать update_attributes мои данные не сохраняются в БД.

Вот этот код:

order.update_attributes(order_completed: "true", stripe_email: params[:stripeEmail]) 

Кто-нибудь увидеть, где моя ошибка есть? Из всего, что я прочитал, должно было сработать. Спасибо за вашу помощь!

ответ

12

update_attributes будет производить проверку, а update_attribute - нет. Если вы знаете, что вы хотите, чтобы обойти Validations наилучший подход для сохранения атрибутов из Hash это сделать это:

order.attributes = { order_completed: "true", stripe_email: params[:stripeEmail] } 
order.save(validate: false) 

Чтобы увидеть, что неспособность взглянуть в order.errors или изменить вызов update_attributes!!), который будет вызывать исключение, показывающее, какая проверка не удалась.

+1

Спасибо за полезное редактирование @smathy :) – pdobb

+0

Спасибо за ответ! Это может быть глупый вопрос, но где именно я нахожу order.errors, я все еще хочу видеть, что случилось. Спасибо еще раз за помощь! – Kelly

+2

После того, как вы выполнили 'order.update_attributes' или после выполнения' order.save', вы можете проверить 'order.errors'. Либо с отладчиком в контроллере, либо путем вывода его в журнал или что вам подходит. – pdobb

0

update_attributes также может управляться ограничениями массового назначения. Если вы используете рельсы-Убедитесь, что у вас есть это покрыто что-то вроде:

params.require(:order).permit(:order_completed, :stripe_email) 
+1

Это только проблема, если 'params [: order]' был аргументом метода массового присвоения. Здесь она сама создает новый хэш, так что это не проблема. – smathy

Смежные вопросы