是否有update_attribute
的替代品?我知道你仍然可以在Rails 3中使用它,但是你会收到弃用消息。
我需要使用update_attribute
的原因是因为我需要跳过验证但运行回调。
我发现这样做的唯一方法(并避免弃用消息),只需从update_attribute
中提取代码:
Object.send("#{attribute}=", value)
Object.save(:validate => false)
我想知道是否还有另一种(正确的)方法。
感谢。
答案 0 :(得分:3)
我会建议答案是不。
您无法将false
传递给update_attributes
以跳过验证。
我建议您update_column,但此方法会跳过回调。从你的问题来判断,这不是你需要的。
<强>更新强>
我在that presentation找到了有趣的表格。我想这可以证明我的意见。
根据该表判断,只有一种方法可以满足条件。
答案 1 :(得分:1)
您会考虑使用条件验证吗? http://guides.rubyonrails.org/active_record_validations_callbacks.html#conditional-validation
您可以在对象上设置一个属性,以禁用当前记录的相关验证。
答案 2 :(得分:-1)
传递的验证过程可以通过传递:validate =&gt;假。当混合使用验证模块时,常规的#save方法将被替换为默认情况。
因此,只需将属性设置为正确的值,并在validates参数设置为false的情况下调用save。除非您拥有依赖于元编程的代码,否则您也不需要使用send,但这在您的示例中并不明显。
object.attribute = value
object.save(:validate => false)