2010-12-20 14 views
2

具体的には、Rails 3のActiveRecordコールバックをスキップ/ディスエーブルしたいと考えています。以下は、私が考えたソリューションの例です。コールバックを持たないオブジェクトを作成するために定義された属性を作成します。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

+0

ブログの記事で、Rails 3の解決方法について触れました。 Rails 3でprivateのcreate_without_callbacksメソッドが削除されました。コールバックに例外を入れることを検討しましたか? –

+0

Hum ...私はそれを "インスタンスごとに"/"プロセスごとに"無効にしたいと思います。このブログでは、グローバルに無効にする方法について説明しています。 – xpepermint

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; end

テスト済み:Rails 4.2.1

関連する問題