2016-06-30 1 views
0

コールバックをスキップします。具体的には、on構文を使用してメソッドのリストを明示的に指定せずにオブジェクトを送信してください。私。以下のようなもの:レールを破棄するときにafter_commitをスキップ

after_commit :foo, except: [:destroy] 
+0

downvoters、説明に気を付けろ? – dimid

答えて

2

私はRuby Tipsでそれを行う方法を見つけた:

after_commit :foo, if: :persisted? 

以上の複雑な条件について:

after_commit, :foo, if: Proc.new {|record| record.persisted? && [...]} 
+0

私は 'except:[]'のより表現力豊かなアプローチよりもこれを好む理由が分かりますか? – oreoluwa

+0

@ololuwa、 ':on'が':except'のように逆になっていたら、私はそれを使います。 – dimid

0

最短ソリューションによって共有される1つです@dimid、しかし私は信じています。現実的なアプローチは、あなたが処理したいイベントをリストし、ちょうど残しておきます。:destroy。現在、:onオプションが3つあります。:create,:update:destroyです。

after_create_commit :foo after_update_commit :foo

after_commit :foo, :on => [:create, :update]

代わり::へ

after_commit :foo, on: :create after_commit :foo, on: :update

またはレール5(https://github.com/rails/rails/pull/22516)ので、それも可能です作成&更新にfooを実行するには

関連する問題