RailsのActiveRecordには、いろんなタイミングで差し込めるコールバック機能があります。
そして、このコールバックには、#after_save
や#before_validation
といった、呼び出すコールバックに応じた名前のメソッドを持ったオブジェクトを作って渡すことができます。
ただ、普通にやろうとするとafter_save SomeObject.new
のようにクラスマクロで書くことになるので、クラス単位で同じコールバックオブジェクトを指定することになります。
今回、「モデルのインスタンスごとにに対応したデータをコールバック側で持って、それを複数のタイミングで引き回したい」というようなことがしたくなってきたのですが、そのデータをモデル側に持たせるのも不格好だと思うので、できるなら「コールバックオブジェクトをインスタンスごとに別々に設定する」ということをしたいのですが、それは可能なのでしょうか。
もしくは、それ以外の方法で「モデルごとのデータを、共通するコールバックインスタンスの間でエレガントに引き回す」ことができれば、それでも構いません。
むろん、以下のような手法で無理やり解決しようと思えばできなくはないのですが、「レールに乗った」解決法があれば教えていただければと思います。
- モデル側にそのデータを格納するメソッドを入れる
- 共通のコールバックオブジェクト側で、モデルのIDなどをキーにしたハッシュを使って、データを整理して入れておく
環境
- Rails 4.2.6(5系列への更新も検討中)
- バックエンドデータベースはMySQL