Ruby on rails 渴望加载并通过关联获得多个

Ruby on rails 渴望加载并通过关联获得多个,ruby-on-rails,has-many-through,eager-loading,Ruby On Rails,Has Many Through,Eager Loading,在我的模型中,我有这个 class User< ApplicationRecord has_many :participations has_many :events, :through => :participations end class Event < ApplicationRecord has_many :participations has_many :users, :through => :participations end class

在我的模型中,我有这个

class User< ApplicationRecord
  has_many :participations
  has_many :events, :through => :participations
end

class Event < ApplicationRecord
  has_many :participations
  has_many :users, :through => :participations
end

class Participation < ApplicationRecord   
  belongs_to :user
  belongs_to :event    
end
<% @event.users.each do |user| %>
   <% p = Participation.find_by user_id: user.id, event_id: @event.id %>
........
.......
我想为eventshow创建一个表,其中包含与活动相关联的用户及其参与状态

在事件视图中,我有这个

class User< ApplicationRecord
  has_many :participations
  has_many :events, :through => :participations
end

class Event < ApplicationRecord
  has_many :participations
  has_many :users, :through => :participations
end

class Participation < ApplicationRecord   
  belongs_to :user
  belongs_to :event    
end
<% @event.users.each do |user| %>
   <% p = Participation.find_by user_id: user.id, event_id: @event.id %>
........
.......
但是,这会导致n+1查询。如何为@event预加载用户和参与者以消除它们

我试过了

   <% @event.users.includes(:participations).each do |user| %> 

但它不起作用….

您可以先在参与中包含用户和事件,然后对其进行迭代,以获取每个参与记录的事件和用户,而不是获取所有用户并对其进行迭代,以获取他们的参与,然后获取他们的关联事件:

Participation.includes(:user, :event).where(event_id: @event.id).each do |participation|
  puts participation.user.id
  puts participation.status
  puts participation.event.id
end

在事件控制器中,您可以像下面这样搜索

@event = Event.includes(participations: :user).find(params[:id])

我找到了解决办法。在事件视图中,我这样做

 <% @event.participations.includes(:user).each do |participation| %>
    <% user = participation.user%>

这是在事件显示中,因此已知该事件作为@event传递给视图。我只想显示特定事件的用户和参与状态。