猿问

如何避免运行ActiveRecord回调?

我有一些具有after_save回调的模型。通常这很好,但是在某些情况下,例如在创建开发数据时,我想保存模型而不运行回调。有没有简单的方法可以做到这一点?类似于...


Person#save( :run_callbacks => false )

要么


Person#save_without_callbacks

我查看了Rails文档,没有找到任何东西。但是,以我的经验,Rails文档并不总能讲述整个故事。


更新


我找到了一篇博客文章,解释了如何从这样的模型中删除回调:


Foo.after_save.clear

我找不到该方法的文档记录,但似乎可行。


婷婷同学_
浏览 573回答 3
3回答

富国沪深

#Rails >= v3.1 only@person.update_column(:some_attribute, 'value')#Rails >= v4.0 only@person.update_columns(attributes)我的原始答案:在Rails3中,假设我们有一个类定义:class User < ActiveRecord::Base&nbsp; after_save :generate_nick_nameend&nbsp;方法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
随时随地看视频慕课网APP

相关分类

Ruby
我要回答