gpt4 book ai didi

ruby-on-rails - 如何在不执行 "update_attributes"的情况下执行 "before_save"?

转载 作者:行者123 更新时间:2023-12-02 12:54:43 24 4
gpt4 key购买 nike

我的 Message 模型中有一个 before_save 定义如下:

   class Message < ActiveRecord::Base
before_save lambda { foo(publisher); bar }
end

当我这样做时:

   my_message.update_attributes(:created_at => ...)

foobar 被执行。

有时,我想更新消息的字段而不执行 foobar

如何在不执行 foobar 的情况下更新 created_at 字段(在数据库中)?

最佳答案

在 Rails 3.1 中,您将使用 update_column .

否则:

一般来说,绕过回调的最优雅的方法如下:

class Message < ActiveRecord::Base
cattr_accessor :skip_callbacks
before_save lambda { foo(publisher); bar }, :unless => :skip_callbacks # let's say you do not want this callback to be triggered when you perform batch operations
end

然后,你可以这样做:

Message.skip_callbacks = true # for multiple records
my_message.update_attributes(:created_at => ...)
Message.skip_callbacks = false # reset

或者,仅针对一条记录:

my_message.update_attributes(:created_at => ..., :skip_callbacks => true)

如果您专门针对 Time 属性需要它,那么 touch 将实现 @lucapette 提到的技巧。

关于ruby-on-rails - 如何在不执行 "update_attributes"的情况下执行 "before_save"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7243729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com