0

リレーションが熱心に積み込まれている場合(例: 経由)、リレーションに対していくつかの操作を実行したいと考えていますincludes。具体的には、Threadn を含むデータ構造がありますMessage。メッセージが熱心にロードされたときに、メッセージのツリーを作成したいと考えています。私は次のようにそれを試しました:

class Thread
  has_many :messages

  after_initialize do
    gen_tree if messages.loaded?
  end
end

私の問題は、リレーションがロードされる前にフックが実行されることです。と同じafter_find

私が望むものを達成する方法はありますか?

こんにちは、CK

4

1 に答える 1

0

私が見つけた解決策の1つは、既存のリレーションメソッドの名前を変更し、独自のメソッドを実装することです。

class Thread
  has_many :messages

  alias_method :messages_orig, :messages
  def messages
    ret = messages_orig

    unless @generated
      @generated = true
      gen_tree
      sort_tree
    end

    ret
  end
end

私がテストした限り、それはマイナスの副作用はありません。

LG、CK

于 2012-11-29T21:50:40.473 に答える