update_attribute vs update_attributes Rails 4

时间:2015-04-08 19:17:17

标签: ruby-on-rails ruby-on-rails-4

我正在尝试在某个操作后更新对象的属性。如果我使用update_attribute,一切都正确地保存到数据库,但我有很多东西需要更新,所以它变得非常重复。

这很好用:

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

但是当我尝试使用update_attributes时,我的数据不会保存到db。

以下是代码:

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

有谁知道我的错误在哪里?从我读过的所有应该有效的内容开始。谢谢你的帮助!

2 个答案:

答案 0 :(得分:15)

update_attributes会触发验证,而update_attribute则不会。如果您知道要绕过验证,那么从Hash中保存属性的最佳方法是:

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

要了解哪些内容失败,请查看order.errors或将您的来电更改为update_attributes!(使用!),这会引发异常,显示验证失败。

Rails 4更新

update_attributesupdate_attributes!是Rails 4 +中updateupdate!的别名。

答案 1 :(得分:0)

update_attributes也可以由质量分配约束来控制。如果您正在使用rails 4,请检查您是否覆盖了以下内容:

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