首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ancestry gem:只返回线程中的最后一个子级

Ancestry gem:只返回线程中的最后一个子级
EN

Stack Overflow用户
提问于 2011-07-01 18:33:50
回答 2查看 549关注 0票数 4

ancestry gem有很多方法来导航树结构。你可以做Model.roots来显示所有的根元素,等等。反之亦然?-为每个树结构返回最新的子元素。

我想过在我的模型中添加一个额外的列(最新/布尔值),然后对after、save、filter等做一些逻辑处理,但是这感觉有点笨拙。:/

诚挚的问候。Asbjørn Morell

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-01 21:27:15

也许你可以使用Class#inherited钩子来实现一些功能,比如在创建新的子类时更新父模型的属性:

http://www.ruby-doc.org/core/classes/Class.html#M000177

票数 0
EN

Stack Overflow用户

发布于 2015-06-12 19:37:12

老问题,仍然是相关的。我给自己找到了一个解决方案(也有点笨拙),但我认为它运行得相当好。

使用如下所示的方法扩展Array类:

代码语言:javascript
复制
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

在此之后,只需像这样使用它(带有前面的验证):

代码语言:javascript
复制
account = Account.find([id])

if account.has_children?
  last_child = account.descendants.ancestry_last_child
end

如果您对扩展ruby/rails核心类有疑问,this将提供帮助

::EDIT::以前的解决方案不能完全工作。此解决方案需要updated_atid

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6546815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档