他のさまざまなモデルからのデータに基づいて計算された値である属性があります。
私はその値をキャッシュするための巧妙な方法を探していcounter_cache
ますが、値はカスタム関数を介して自動的に更新されます。モデルにはすでにカスタム関数があります。
依存データのいずれかが変更された場合は、この関数を呼び出す必要があります。助言がありますか?
他のさまざまなモデルからのデータに基づいて計算された値である属性があります。
私はその値をキャッシュするための巧妙な方法を探していcounter_cache
ますが、値はカスタム関数を介して自動的に更新されます。モデルにはすでにカスタム関数があります。
依存データのいずれかが変更された場合は、この関数を呼び出す必要があります。助言がありますか?
コメントに基づいて編集:
OK、これで Like モデルと User モデルができました。ユーザーのメソッドで人気を更新する関数を配置し、それを受け取ったユーザーに対してそれをトリガーするために、Like の after_create または after_save (作成後に変更できる場合) コールバックを配置します。
class User < ActiveRecord::Base
has_many :likes
def calculate_popularity
update_attribute(:popularity, existing_function(foo))
end
end
class Like < ActiveRecord::Base
belongs_to :user
after_create :update_user_popularity
def update_user_popularity
user.calculate_popularity
end
end
明らかに、いいねを受け取るのがユーザー自身ではなく、さまざまな種類のユーザー アクティビティである場合は、関連付けを掘り下げて、いいねからユーザーに到達する必要がありますが、それほど難しくはありません。