2010-12-20 17 views
2

我想跳过/禁用ActiveRecord特别是Rails 3中的回调。以下是我想到的一个示例解决方案 - 创建一个定义用于创建没有回调的对象的属性。如何在Rails 3中禁用ActiveRecord回调?

product = Product.new(title: 'Smth') 
product.send(:create_without_callbacks) 

上面的例子是在this answer相似,但作者说,这是专门Rails的 2.是否有类似的,甚至更好,方式做到这一点为Rails 3

回答

1
  1. 见的问题:How can I avoid running ActiveRecord callbacks?
  2. This blog post与例如另一种解释。
+0

我看见但对于Rails3中没有很好的解决方案。 – xpepermint 2010-12-20 18:52:43

+0

该博客文章提到了Rails 3的解决方案。 Rails 3中删除了私有create_without_callbacks方法。您是否考虑在回调中添加异常? – 2010-12-20 20:12:20

+0

嗡嗡声...我想禁用它“每个实例”/“每个进程”。博客解释了如何全局禁用它。 – xpepermint 2011-01-23 10:21:58

0

你可能会发现这里的解决方案有所帮助:http://manuelvanrijn.nl/blog/2012/01/12/disable-rails-before-slash-after-callback/

TL; DR - 如果你这样做是生产,它可能有助于创建一个类(见博客文章),让您的代码DRY 。否则,如果你这样做一次,甚至在测试中(像我一样),你可以简单地做到以下几点:

SomeModel.skip_callback(:save, :before, :before_action) 
SomeModel.skip_callback(:save, :after, :after_action) 

的博客文章提供的回调上述方法将工作的一个很好的列表。

这将适用于Rails 3和Rails 4.正如评论所指出的,如果您必须禁用回调,您可能需要问自己为什么需要这些回调。要扩展,禁用回调仅在生产中才有问题。如果你需要在测试中禁用它们(这正是我自己正在做的),那么它是可以接受的......特别是因为Rails 4核心不赞成使用观察者。

-1

SomeModel.skip_callback(:save)do; somemodel_instance.save;结束

测试:Rails的4.2.1

相关问题