4

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

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

我发现这样做(并避免弃用消息)的唯一方法是简单地从以下位置提取代码update_attribute

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

我想知道是否有另一种(正确的)方法可以做到这一点。

谢谢。

4

3 回答 3

6

我会建议答案是否定的。

您不能通过falsetoupdate_attributes跳过验证。

我会推荐你​​ update_column,但这个方法跳过回调。从你的问题来看,这不是你所需要的。

更新:

我在那个演示文稿中找到了有趣的表格。我想这可以证明我的观点。

update_(属性|列)s

从这张表来看,满足条件的方法只有一种。

于 2012-10-17T15:07:52.993 回答
1

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

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

于 2012-10-18T18:25:24.563 回答
0

验证文档

可以通过传递 :validate => false 来跳过保存时的验证过程。当验证模块混入时,常规的 #save 方法将被替换为默认方法。

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

object.attribute = value
object.save(:validate => false)
于 2012-10-17T16:06:33.660 回答