こんにちは私は独特の問題を抱えています。after_commit コールバックを使用して通知を送信していますが、コールバックがまったくトリガーされていないようです。状況を簡略化すると、次のようになります。
class Message < ActiveRecord::Base
after_commit :do_something
def do_something
raise 'Doing something'
end
end
次に、コンソールを開いてメッセージを作成すると、レイズが発生することを期待していました。しかし、何も起こりません。さらに、「do_something」メソッドを完全に削除しても、レールは文句を言いません。これはトランザクション フィクスチャを使用したテストではないことに注意してください。データベースでコミットされたレコードも表示されます。私のレールのバージョンは 3.0.9 です。特にそれが良い場合は、助けてくれてありがとう:-)
編集:コードを別のマシンにデプロイすると、コールバック DID がトリガーされることを後で知りました。だから、それは私のセットアップに何かあるに違いありません。それでも、これを引き起こしている可能性のあるものについての洞察をいただければ幸いです。
Edit2:コメントから。
- DB は MySQL であるため、トランザクションが存在します。
- コールバックのアクションを指定しても役に立ちませんでした (:on => :create)。
- after_commit が必要で、他のコールバックは必要ありません