繁体   English   中英

渴望负载和has_many通过关联

[英]Eager load and has_many through association

在我的模特中,我有这个

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#show创建一个表,其中包含与事件及其参与状态相关的用户。

在事件视图中,我有这个

<% @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| %> 

但这没做.....

在您的event_controller中,您可以像下面这样搜索

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

您可以先获取用户和事件,然后再对其进行迭代以获取每个参与记录的事件和用户:

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.participations.includes(:user).each do |participation| %>
    <% user = participation.user%>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM