Rails - 如何在单个递归表Rails中包含父记录来获取(查询)所有子记录

时间:2014-07-17 11:03:42

标签: ruby-on-rails ruby activerecord

我有表说用户.which是递归的意思是表中存在parent_id,它是同一个table.table结构的任何用户的用户id。就像那样:

id  email         parent_id
1   test@test.com   nil
2   test1@test.com  1
3   email           1
4   email           2
5   email          nil
6   email           3

现在我想要,如果我必须使用任何一个id查询所有子记录,包括父。我可以在rails中做。我想递归获取所有子记录,包括父记录。

1 个答案:

答案 0 :(得分:0)

您可以尝试

def find_all_child_parents(p_id)
  return_childs = []
  # Add this node.
  return_childs << Child.find(p_id)
  direct_childs = User.where(parent_id: p_id) 
  direct_child.each do |child|
    # Add nodes you get from recursive call
    return_childs.concat(find_all_child_parents(child.id))
  end
  return_childs 
end

它以递归方式为您提供父项的所有子项,包括父项本身。