これは非常に興味深い質問だと思います。ここでちょっと大声で考えてみます…
最終的に直面するのは、特定の機能セットを実現するために、デザイン パターンの許容されるプラクティスに違反するという決定です。だから、私たちは自問しなければなりません
1)MVCパターンに違反しない可能性のある解決策は何ですか
2) MVC パターンに違反する可能性のある解決策は何ですか?
3) どのオプションが最適ですか? 私はデザイン パターンと標準的な慣行を非常に重要だと考えていますが、同時に、それらに固執するとコードがより複雑になる場合は、慣習に違反することが適切な解決策になる可能性があります。それについて私に同意しない人もいるかもしれません。
最初に #1 について考えてみましょう。
頭のてっぺんから、次の可能な解決策を考えます
A) 誰がこれらのアクションを実行しているかに本当に関心がある場合、このデータを何らかの方法でモデルに保存する必要がありますか? この情報をオブザーバーが利用できるようにします。また、ActiveRecord クラスの他のフロントエンド呼び出し元が同じ機能を取得することも意味します。
B) 誰がエントリを作成したかを理解することにはあまり関心がないが、Web アクション自体をログに記録することに関心がある場合は、コントローラのアクションを「観察」することを検討してください。Railsソースを調べてからしばらく時間が経ったので、ActiveRecord::Observerがモデルを「観察」しているのかどうかはわかりませんが、コントローラーオブザーバーに適応させることができるかもしれません. この意味で、あなたはもはやモデルを監視していないので、そのオブザーバーにセッションやその他のコントローラー タイプのデータ情報を提供することは理にかなっています。C) 最小の「構造」を使用した最も簡単な解決策は、監視しているアクション メソッドの最後にロギング コードをドロップすることです。
ここでオプション #2 を検討して、MVC の慣行を破ります。
A)あなたが提案したように、モデルのオブザーバーにセッションデータへのアクセスを許可する手段を見つけることができます。モデルをビジネス ロジックに結合しました。
B)ここでは他に考えられません:)
私の個人的な傾向は、あなたのプロジェクトの詳細を知らなくても、人をレコードに関連付けたい場合は 1A、またはこれを行うことに関心のある場所がほんの少ししかない場合は 1C です。すべてのコントローラーとアクションに対して堅牢なログ ソリューションが本当に必要な場合は、1B を検討してください。
モデルオブザーバーにセッションデータを見つけさせるのは少し「臭い」ので、他のプロジェクト/状況/コンテキストでモデルを使用しようとすると壊れる可能性があります。