a common race conditionを避けるためにコミット後に実行する必要があるサイドキーグジョブがあります。Railsのインライン `after_commit`コールバック
class User < ActiveRecord::Base
...
after_commit do |user|
if @enqueue_some_job
SomeJob.new(user).enqueue
@enqueue_some_job = nil
end
end
def verify
@enqueue_some_job = ...
...
save!
end
end
コードは少し醜いです。私は何とかこのようなコールバックをインラインでラップすることができ、むしろ多くをしたい:
class User < ActiveRecord::Base
def verify
if ...
run_after_commit do |user|
SomeJob.new(user).enqueue
end
end
...
save!
end
end
はRailsのに組み込まれたものは、(それが一時的なインスタンス変数の設定に依存しない)、このような構文をサポートするために存在していますか?あるいは、Railsを拡張してこのような構文を追加するライブラリが存在しますか?
:)それはあなたのお役に立てば幸いですので、私は、その後のインスタンス変数を設定する必要があるだろうそれらのそれぞれ。 –
私はあなたが何を得ようとしているのか、本当にそれを思っているのか分かりません。 if節または 'if'オプションで直接' verify'メソッドを使うことができます。なぜ、あなたがブール条件に評価されるメソッドだけでなく、インスタンス変数/状態が必要だと思うのか分かりません。 – max
また、コードの実行時にはやや混乱しているように見えます。クラスの評価時にコールバックが宣言されています。 2番目の例のverifyメソッドはインスタンスメソッドです。メタプログラミングを使ってインスタンスからシングルトンクラスを変更することができますが、これはあなたが望むものではない可能性が最も高いです。 – max