私が持っているとしましょう:
class Foo < ActiveRecord::Base
has_many :bar
end
class Bar < ActiveRecord::Base
belongs_to :foo
end
Bar
また、クラスにタイムスタンプ フィールド (レコードが更新されると自動的に更新されるフィールド) があると仮定します。
質問: Rails、ActiveRecord、またはどこかに既存の機能/メソッド呼び出しがあり、クラスupdated_at
で定義された関連付けのいずれかで、任意のレコードの列の最新の値を教えてくれるメソッドを呼び出すことができますか? Foo
?
したがって、理論的なfoo.latest_change_to_associated_objects
方法では、最新のupdated_at
フィールドが関連付けられているレコード (この場合は任意のBar
レコード) のタイムスタンプを取得する必要があります。
親クラスがあり、1 つの関連付けだけで十分単純な最も単純なケース - 1 つまたは 2 つのコールバックでうまくいきます。クラスに多くの関連付けが定義されている状況に興味があります。この機能を持つアソシエーションの一部またはすべてを宣言できる宝石 (または ActiveRecord 内に既に存在する機能) はありますか?
明らかに、これを把握するために SQL 呼び出しを実行できますが、最新の変更を確認するたびに SQL 呼び出しを実行したくはありません。latest_change_on_association
関連するレコードが変更されたときに、親のフィールド (またはそれを呼び出したいもの) を自動的に更新するコールバック チェーンが必要なようです。最新の変更タイムスタンプを取得するには、親レコード。
注: http://api.rubyonrails.org/classes/ActiveModel/Observer.htmlを調べましたが、クラスごとにオブザーバーを作成する必要があるという問題がありました。アソシエーションのリストからオブザーバーを作成する自動化が、gem か何かで既にラップされていれば素晴らしいことです。