给定一个允许用户邀请其他用户参加事件的系统:

class Event
  has_many :invites
end

class User
  has_many :invites
  has_many :invited, inverse_of: :inviter, foreign_key: :inviter_id, class_name: 'Invite'
end

class Invite
  belongs_to :user
  belongs_to :event
  belongs_to :inviter, class_name: 'User'
  has_many :invited, -> (invite) { where(invites: { event_id: invite.event_id }) }, through: :user, class_name: 'Invite'
end

我正在生成一个简单的报告,其中显示了事件的所有邀请。我正在尝试将报告修改为还包括一些针对示例事件的invited可以执行的操作:
<%- event.includes(:user).each do |invite| -%>
  <%= invite.user.name %>
  <%- invite.invited.each do |other| -%>
    <%= link_to invite_path(other), method: :destroy do %>
      ...
    <% end %>
  <%- end -%>
<%- end -%>

这可以正常工作,但存在N + 1问题。尝试加载自定义关联会给出以下信息:



有没有办法像这样渴望加载?是否可以给其他提示给has_many而不是使用实例变量?

最佳答案

参见Rails 5 how to form association between tables on multiple shared attributes

您可能需要定义两个不同的关联。一个特定于实例,另一个在连接期间使用。

10-04 12:19
查看更多