Rails - 嵌套在Active Records上?

时间:2014-06-24 22:52:49

标签: ruby-on-rails rails-activerecord

我有一个我获取的事件列表。 我试图包含与此事件相关联的每个用户以及与每个用户关联的每个配置文件。用户包括在内但不包括他们的个人资料。

我将如何做到这一点

Event.includes(:users [{profile:}])

文档似乎并不清楚: http://guides.rubyonrails.org/active_record_querying.html

3 个答案:

答案 0 :(得分:356)

我相信以下内容适合您。

Event.includes(users: :profile)

如果您想要包含已包含关联的关联(我们称之为C)(我们将其称为B),您将使用上述语法。但是,如果您还想要包含D,这也是B的关联,那么当您使用Rails Guide中的示例中给出的数组时,也是如此。

A.includes(bees: [:cees, :dees])

你可以继续像这样嵌套(如果你真的需要)。假设A也与Z相关联,并且C与E和F相关联。

A.includes( { bees: [ { cees: [:ees, :effs] }, :dees] }, :zees)

为了好玩,我们还要说E与J和X相关联,并且D与Y相关联。

A.includes( { bees: [ { cees: [ { ees: [:jays, :exes] }, :effs] }, { dees: :wise } ] }, :zees)

答案 1 :(得分:11)

如果有人正在执行respond_to块来生成嵌套的json,您可以执行以下操作:

respond_to do |f|
  f.json do
    render json: event.to_json(include: {users: {include: :profile} }), status: :ok
  end
end

答案 2 :(得分:1)

请参阅Joe Kennedy的解决方案。

这是一个更具可读性的示例(为了将来我)。

includes(
  :product,
  :package, {
    campaign: [
      :external_records,
      { account: [:external_records] },
      { agency: [:external_records] },
      :owner,
      :partner,
    ]
  }
)