Rails通过深层嵌套访问所有关系

时间:2018-06-28 08:29:01

标签: ruby-on-rails nested

我有以下型号:

class Kid < ApplicationRecord
  belongs_to :group, optional: true

class Group < ApplicationRecord
  has_many :kids
  belongs_to :head

class Head < ApplicationRecord
  has_many :groups
  belongs_to :axis

class Axis < ApplicationRecord
  has_many :heads

我一直想做的是让所有孩子的头部和轴(例如:@ axis.kids会像@ group.kids一样给所有孩子)。 我尝试了一些带有循环和数组的类方法,但是到目前为止还没有运气。 任何想法如何做到这一点? 谢谢!

使用rails 5.2

编辑: 我得到了所有脑袋的孩子

def kids
 Kid.where(group_id: self.groups.map(&:id))
end

但是仍然没有设法让轴的孩子们

2 个答案:

答案 0 :(得分:3)

您可以在Head中添加:

has_many :kids, through: :groups

然后您可以执行以下操作:

@head.kids

请参见Rails docs

答案 1 :(得分:1)

尝试添加以下内容: has_many:kids,通过::heads 在axis.rb