【问题标题】:Active Record includes with a belongs_to and has_many doesn't return associationsActive Record 包含belongs_to 和has_many 不返回关联
【发布时间】:2019-11-10 16:25:55
【问题描述】:

我有以下型号:

user.rb

class User < ApplicationRecord
  has_many :invitations
end

organization.rb

class Organization < ApplicationRecord
  has_many :invitations
end

invitation.rb

class Invitation < ApplicationRecord
  belongs_to :user
  belongs_to :organization
end

我正在尝试通过以下方式查询 Active Record:

user = User.find(params[:id])
user.invitations.includes(:organization)

我希望能够获取用户的所有邀请,并且邀请包含其相关组织的属性。但是,我只收到了邀请,没有收到任何组织的属性。

即使我尝试:

Invitation.includes(:organization)

我仍然没有得到每个邀请的关联组织。

非常感谢任何和所有帮助!

【问题讨论】:

  • 拨打Invitation.joins(:organization)时有记录吗?

标签: ruby-on-rails activerecord


【解决方案1】:

includes 方法提供预加载。这解决了 N + 1 个查询问题。您可以访问已加载的组织,例如user.invitations.first.organization。这里不会有新的查询。

如果要结合邀请和组织属性,可以使用joins和select。

user.invitations
    .joins(:organization)
    .select('invitations.*, organizations.foo, organizations.boo as blabla')

【讨论】:

    【解决方案2】:

    @demir 已经回答了你的问题。

    作为补充 - 可能,您将 includesinclude 选项的模型混淆了 to_json \ as_json

    如果你想返回一些 JSON 结果(例如在你的 API 响应中),那么你可以做user.as_json(include: [invitations: { include: :organization }])

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-20
      • 1970-01-01
      相关资源
      最近更新 更多