2010-12-20 23 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

相關問題