Ruby on rails 向上遍历对象的层次结构以找到第一个祖先
我正在构建Rails 5.2应用程序。 在这个应用程序中,我得到了许多会议对象 每个会议对象都具有以下属性:Ruby on rails 向上遍历对象的层次结构以找到第一个祖先,ruby-on-rails,Ruby On Rails,我正在构建Rails 5.2应用程序。 在这个应用程序中,我得到了许多会议对象 每个会议对象都具有以下属性: - id - meeting_id - title 用户可以构建通过Meeting_id属性连接的会议对象的层次结构。 我正在寻找一种方法来找到任何给定会议对象的最高祖先。所以基本上我需要找到一种向上遍历的方法,直到找到层次结构中的第一个会议对象 重要的是,该方法支持一定数量的儿童 This is my attempt. It only supports tree levels
- 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
结束这是一块很好的宝石
似乎一个简单的循环就足够了,或者一些递归的东西——什么是绊脚石?问题是让它支持无限多的级别,而不是硬编码。否则工作。理解;我是说为什么循环/递归函数不能工作?当然可以,但老实说,我不知道怎么做。我试过gem,但它已经13年了,我发现没有办法用meeting_id代替parent_id。但是你的递归代码工作得非常好!非常感谢。
class Meeting < ActiveRecord::Base
acts_as_tree order: "name"
end
def find_parent meeting
return meeting unless meeting.meeting_id
meeting = Meeting.find meeting.meeting_id
find_parent meeting
end