得到具有自我尊重的父子关联轨道的模型的层次结构

时间:2016-12-27 08:20:27

标签: ruby-on-rails ruby-on-rails-4 activerecord associations

我的模型Document具有以下关系

belongs_to :parent, class_name: 'Document'
has_many :children, class_name: 'Document', foreign_key: 'parent_id'

我希望能够在文档对象上调用一个方法来检索它的所有父项和子项。有没有办法通过活动记录

来做到这一点

2 个答案:

答案 0 :(得分:1)

您可能想要使用closure_tree gem。它对层次结构非常方便,

答案 1 :(得分:0)

我最终在文档模型上实现了这些方法

def get_children(level = 0, result = [])
  result.push([level, self])
  if(!self.children.empty?)
    self.children.each do |child|
      child.get_children(level+1, result)
    end
  end
  if(level == 0)
    return result
  end
end

def get_parents(result = [])
  if self.parent.present?
    result.push(self.parent)
    self.parent.get_parents(result)
  else
    return result
  end
end