如何获取所有父记录的所有记录

时间:2016-05-27 17:28:51

标签: ruby-on-rails controller associations

我需要为表单创建一个选择框,其中列出了所有父项的所有子记录。我如何在我的控制器中执行此操作?我正在考虑下面的答案,但它的返回"未定义的方法为零:NilClass"

before_action :get_children

def get_children
  @parents = current_user.parents.all
  @children = @parents.children.all
end

3 个答案:

答案 0 :(得分:1)

@parents是一个数组,因此该数组的子节点为零。 所以你必须使用某种类型的循环:

def get_children
  children = []
  @parents = current.user.parents.all
  @parents.each do |child|
    children << child
  end
  return children
end

像这样的工作。

答案 1 :(得分:0)

如果你想要一个数组:

@children = @parents.map(&:children).flatten.uniq

如果你想要一个ActiveRecord :: Relation(假设你的模型被称为Thing,并且每个东西都属于父级):

@children = Thing.where(parent_id: @parents)

答案 2 :(得分:0)

您可以执行以下操作:

def get_children
  @parents = current_user.parents.all
  @children = Children.where(parent_id: @parents.pluck(:id).uniq)
end