我正在尝试在某个操作后更新对象的属性。如果我使用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])
有谁知道我的错误在哪里?从我读过的所有应该有效的内容开始。谢谢你的帮助!
答案 0 :(得分:15)
update_attributes
会触发验证,而update_attribute
则不会。如果您知道要绕过验证,那么从Hash中保存属性的最佳方法是:
order.attributes = { order_completed: "true", stripe_email: params[:stripeEmail] }
order.save(validate: false)
要了解哪些内容失败,请查看order.errors
或将您的来电更改为update_attributes!
(使用!
),这会引发异常,显示验证失败。
update_attributes
和update_attributes!
是Rails 4 +中update
和update!
的别名。
答案 1 :(得分:0)
update_attributes也可以由质量分配约束来控制。如果您正在使用rails 4,请检查您是否覆盖了以下内容:
params.require(:order).permit(:order_completed, :stripe_email)