首页 > 解决方案 > 向上遍历对象的层次结构以找到第一个祖先

问题描述

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

结尾

标签: ruby-on-rails

解决方案


有一个很好的宝石可以充当树

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

推荐阅读