ancestry gem有很多方法可以导航树结构。你可以做Model.roots来显示所有根元素等。如何相反? - 为每个树结构返回最新的子项。
我想在我的模型中添加一个额外的列(latest / boolean),然后在保存过滤器等之后做一些逻辑。但是这感觉有点笨拙。 :/
祝你好运。 AsbjørnMorell
答案 0 :(得分:0)
也许你可以和Class#inherited
钩子一起破解,比如在创建新子类时更新父模型的属性:
答案 1 :(得分:0)
老问题,仍然相关。 发现自己是一个解决方案(也有点笨拙),但我认为它运作得相当好。
使用如下方法扩展Array类:
class Array
def ancestry_last_child
last_child = self.map { |a| [a[:id], a[:ancestry], a[:updated_at]] }.sort_by { |id, anc, dat| [anc.split('/').length, dat] }.last
self.find { |a| a[:id] == last_child[0] }
end
end
之后只需使用它(使用前面的验证),如下所示:
account = Account.find([id])
if account.has_children?
last_child = account.descendants.ancestry_last_child
end
如果您对扩展ruby / rails核心类有疑问this会有所帮助
:: EDIT ::
以前的解决方案没有完整的工作。此解决方案需要updated_at
和id
列