0

includes如果关系已经被急切地加载(例如 via ),我想对关系进行一些操作。具体来说,我有一个Thread包含 nMessage的数据结构。我想在急切加载消息时创建消息树。我尝试如下:

class Thread
  has_many :messages

  after_initialize do
    gen_tree if messages.loaded?
  end
end

我的问题是在加载关系之前执行了钩子。与 相同after_find

有没有办法实现我想要的?

问候,CK

4

1 回答 1

0

我发现的一种解决方案是重命名现有的关系方法并实现您自己的:

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 回答