Ruby on rails Rails 3.2:在初始化后使用预加载关系

Ruby on rails Rails 3.2:在初始化后使用预加载关系,ruby-on-rails,relation,Ruby On Rails,Relation,如果关系已加载,我想对其执行一些操作(例如,通过包含)。具体来说,我有一个数据结构Thread,其中包含nMessages。我想创建一个消息树,当它们急于加载时。我试过的方法如下: class Thread has_many :messages after_initialize do gen_tree if messages.loaded? end end 我的问题是,钩子是在关系加载之前执行的。与查找后的相同 有没有办法实现我想要的 您好, CK我找到的一个解决方案是重

如果关系已加载,我想对其执行一些操作(例如,通过
包含
)。具体来说,我有一个数据结构
Thread
,其中包含n
Message
s。我想创建一个消息树,当它们急于加载时。我试过的方法如下:

class Thread
  has_many :messages

  after_initialize do
    gen_tree if messages.loaded?
  end
end
我的问题是,钩子是在关系加载之前执行的。与查找后的
相同

有没有办法实现我想要的

您好,
CK

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

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