为了账号安全,请及时绑定邮箱和手机立即绑定

如何避免运行ActiveRecord回调?

如何避免运行ActiveRecord回调?

婷婷同学_ 2019-10-15 10:04:55
我有一些具有after_save回调的模型。通常这很好,但是在某些情况下,例如在创建开发数据时,我想保存模型而不运行回调。有没有简单的方法可以做到这一点?类似于...Person#save( :run_callbacks => false )要么Person#save_without_callbacks我查看了Rails文档,没有找到任何东西。但是,以我的经验,Rails文档并不总能讲述整个故事。更新我找到了一篇博客文章,解释了如何从这样的模型中删除回调:Foo.after_save.clear我找不到该方法的文档记录,但似乎可行。
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

#Rails >= v3.1 only

@person.update_column(:some_attribute, 'value')

#Rails >= v4.0 only

@person.update_columns(attributes)

我的原始答案:

在Rails3中,


假设我们有一个类定义:


class User < ActiveRecord::Base

  after_save :generate_nick_name

end 

方法1:


User.send(:create_without_callbacks)

User.send(:update_without_callbacks)

方法2:如果要在rspec文件或任何其他文件中跳过它们,请尝试以下操作:


User.skip_callback(:save, :after, :generate_nick_name)

User.create!()

注意:完成此操作后,如果您不在rspec环境中,则应重置回调:


User.set_callback(:save, :after, :generate_nick_name)

在轨道上对我很好3.0.5


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 572 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信