给定一个允许用户邀请其他用户参加事件的系统:
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。
您可能需要定义两个不同的关联。一个特定于实例,另一个在连接期间使用。