Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 向上遍历对象的层次结构以找到第一个祖先_Ruby On Rails - Fatal编程技术网

Ruby on rails 向上遍历对象的层次结构以找到第一个祖先

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

我正在构建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

结束

这是一块很好的宝石


似乎一个简单的循环就足够了,或者一些递归的东西——什么是绊脚石?问题是让它支持无限多的级别,而不是硬编码。否则工作。理解;我是说为什么循环/递归函数不能工作?当然可以,但老实说,我不知道怎么做。我试过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