ruby-on-rails - 向上遍历对象的层次结构以找到第一个祖先
问题描述
我正在构建一个 Rails 5.2 应用程序。在这个应用程序中,我得到了许多会议对象。
每个会议对象都有以下属性:
- id
- meeting_id
- title
用户可以构建通过 meeting_id 属性连接的会议对象的层次结构。我正在寻找一种方法来找到任何给定会议对象的最高祖先。所以基本上我需要找到一种向上遍历的方法,直到在层次结构中找到第一个会议对象。
重要的是该方法支持无限数量的孩子。
This is my attempt. It only supports tree levels :/
def find_parent
if self.meeting_id
meeting = Meeting.find self.meeting_id
if meeting.meeting_id
meeting2 = Meeting.find meeting.meeting_id
meeting2.id
if meeting2.meeting_id
meeting3 = Meeting.find meeting2.meeting_id
if meeting3.meeting_id
meeting4 = Meeting.find meeting3.meeting_id
meeting4.id
else
meeting3.id
end
else
meeting2.id
end
else
meeting.id
end
else
self.id
end
结尾
解决方案
有一个很好的宝石可以充当树
class Meeting < ActiveRecord::Base
acts_as_tree order: "name"
end
你可以找到, root
, '祖先', '兄弟姐妹'
注意:它使用parent_id
(在您的情况下meeting_id
,我认为它必须是可配置的。)
因为Recursive
你可以尝试以下
def find_parent meeting
return meeting unless meeting.meeting_id
meeting = Meeting.find meeting.meeting_id
find_parent meeting
end
推荐阅读
- javascript - 将源添加到 Highcharts 导出 CSV
- javascript - 变量不起作用
- python - 最短可能生成的唯一 ID
- python - MutableMapping pop() 方法的类型提示定义
- upgrade - HTTP/2 与 Ubuntu 18.04
- swift - 通用数组的 Swift 4.1 类型推断与 Swift 4.0 不同
- javascript - .json 数据显示在 webpack 服务器中,但不显示在生产版本中
- android - 如果您不覆盖 onCreate,默认活动是什么?
- java - 等待所有并行任务,如果任何任务失败,则完成未来失败
- excel - 根据单元格值查找所有行并复制到不同的工作表。