嗯,最(脏)
解决方法
会是这样的。它构建了参数
preload
达到一定深度:
def preload_args(relation, max_level \ 50) do
preload_args(relation, max_level - 1, relation)
end
defp preload_args(_relation, level, acc) when level <= 0, do: acc
defp preload_args(relation, level, acc) do
preload_args(relation, level - 1, [{relation, acc}])
end
</code>
要使用它:
Repo.preload record, Record.preload_args(:changed_to)
</code>
这会预先加载
:changed_to
关系到一定程度或直到没有更多。当然,这不是您真正想要使用的解决方案,因为它对每个预加载执行查询,而您不知道链预先存在多长时间,可能比50步更长。
(请不要为此代码/建议烤我,你特别要求
解决方法
太。 ;)
我觉得
关于’封闭表’的评论
通过Aetherus指出的
本文
可能会引导您找到更好的解决方案。它还强化了我的假设,即您不需要首先存储父级和子级ID,仅使用parent_id就足够了。这样也可以更容易地插入新记录:您也不需要更新父记录。