我想对关系做一些操作,如果它已经热切(例如通过includes
)。在具体的术语中,我有一个数据结构Thread
,其中包含n Message
个。我想在他们急切加载时创建一个消息树。我尝试了如下:
class Thread
has_many :messages
after_initialize do
gen_tree if messages.loaded?
end
end
我的问题是钩子是在加载关系之前执行的。与after_find
相同。
有没有办法达到我想要的目的?
问候, CK
答案 0 :(得分: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