我有一些有after_save回调的模型。通常这很好,但在某些情况下,比如创建开发数据时,我希望在不运行回调的情况下保存模型。有没有简单的方法可以做到这一点?类似于..。
Person#save( :run_callbacks => false )
或
Person#save_without_callbacks
我查看了Rails文档,没有找到任何东西。然而,根据我的经验,Rails文档并不总是能说明全部情况。
更新
我找到了a blog post,它解释了如何从这样的模型中删除回调:
Foo.after_save.clear
我找不到这种方法的文档记录在哪里,但它似乎有效。
发布于 2009-03-11 04:29:37
此解决方案仅适用于Rails 2。
我刚刚调查过这个问题,我想我有一个解决方案。您可以使用两种ActiveRecord私有方法:
update_without_callbacks
create_without_callbacks
您将不得不使用send来调用这些方法。示例:
p = Person.new(:name => 'foo')
p.send(:create_without_callbacks)
p = Person.find(1)
p.send(:update_without_callbacks)
这绝对是你真正想要在控制台中或在做一些随机测试时使用的东西。希望这能有所帮助!
发布于 2015-12-10 06:41:28
如果目标是在没有回调或验证的情况下简单地插入一条记录,并且您不想求助于额外的gem、添加条件检查、使用原始SQL或以任何方式混淆现有的代码,那么可以考虑使用指向现有数据库表的“影子对象”。如下所示:
class ImportedPerson < ActiveRecord::Base
self.table_name = 'people'
end
这适用于每个版本的Rails,是threadsafe,并且完全消除了所有的验证和回调,不需要修改现有的代码。您只需在实际导入之前抛出类声明,就可以了。只需记住使用您的新类来插入对象,例如:
ImportedPerson.new( person_attributes )
发布于 2010-11-26 16:03:40
rails 3:
MyModel.send("_#{symbol}_callbacks") # list
MyModel.reset_callbacks symbol # reset
https://stackoverflow.com/questions/632742
复制相似问题