1

他のさまざまなモデルからのデータに基づいて計算された値である属性があります。

私はその値をキャッシュするための巧妙な方法を探していcounter_cacheますが、値はカスタム関数を介して自動的に更新されます。モデルにはすでにカスタム関数があります。

依存データのいずれかが変更された場合は、この関数を呼び出す必要があります。助言がありますか?

4

1 に答える 1

2

コメントに基づいて編集:

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

明らかに、いいねを受け取るのがユーザー自身ではなく、さまざまな種類のユーザー アクティビティである場合は、関連付けを掘り下げて、いいねからユーザーに到達する必要がありますが、それほど難しくはありません。

于 2011-12-15T20:39:08.790 に答える