Rails update_attribute替换?

时间:2012-10-17 14:41:13

标签: ruby-on-rails-3 validation callback update-attribute

是否有update_attribute的替代品?我知道你仍然可以在Rails 3中使用它,但是你会收到弃用消息。

我需要使用update_attribute的原因是因为我需要跳过验证但运行回调。

我发现这样做的唯一方法(并避免弃用消息),只需从update_attribute中提取代码:

Object.send("#{attribute}=", value)
Object.save(:validate => false)

我想知道是否还有另一种(正确的)方法。

感谢。

3 个答案:

答案 0 :(得分:3)

我会建议答案是

您无法将false传递给update_attributes以跳过验证。

我建议您update_column,但此方法会跳过回调。从你的问题来判断,这不是你需要的。

<强>更新

我在that presentation找到了有趣的表格。我想这可以证明我的意见。

update_(attribute|column)s

根据该表判断,只有一种方法可以满足条件。

答案 1 :(得分:1)

您会考虑使用条件验证吗? http://guides.rubyonrails.org/active_record_validations_callbacks.html#conditional-validation

您可以在对象上设置一个属性,以禁用当前记录的相关验证。

答案 2 :(得分:-1)

来自validations documentation

  

传递的验证过程可以通过传递:validate =&gt;假。当混合使用验证模块时,常规的#save方法将被替换为默认情况。

因此,只需将属性设置为正确的值,并在validates参数设置为false的情况下调用save。除非您拥有依赖于元编程的代码,否则您也不需要使用send,但这在您的示例中并不明显。

object.attribute = value
object.save(:validate => false)