Ruby on rails 删除/重构以避免N+;1.

Ruby on rails 删除/重构以避免N+;1.,ruby-on-rails,Ruby On Rails,我遇到了一个问题,我有一个巨大的N+1问题,如下所示: <% @reports.each do |report| %> <% (@first_week..@current_week).each do |week_number| %> <% if report.user.answers.where(week_number: @current_week).exists? %> <%= image_tag report.user.a

我遇到了一个问题,我有一个巨大的N+1问题,如下所示:

<% @reports.each do |report| %>
  <% (@first_week..@current_week).each do |week_number| %>
    <% if report.user.answers.where(week_number: @current_week).exists? %>
        <%= image_tag report.user.avatar.url(:thumb), size: '30', class: 'img-circle media-object' %>
        <%= link_to "#{report.user.first_name + ' ' + report.user.last_name}", weekly_report_path(report.user.id, week_number) %>
        <%= report.user.due_date %>
        <%= week_number %>
    <% end %>
  <% end %>
<% end %>
在这里,我如何避免N+1问题,代码是否很好,只需要进行快速加载,还是应该重新编写?如果是,有什么建议吗

我得到的项目符号错误有:

  Reviewer => [:user]
  Add to your finder: :includes => [:user]
  index:15 which is:
  <% if report.user.answers.where(week_number: @current_week).exists? %>



  User => [:company]
  Add to your finder: :includes => [:company]
  navigation_links:21 which is:
<li><%= link_to "Settings", edit_company_path(current_user.company) %></li>
Reviewer=>[:user]
添加到finder::includes=>[:user]
索引:15,即:
用户=>[:公司]
添加到您的finder::includes=>[:company]
导航链接:21,即:

  • 对于信息有限的一行,我将快速尝试一下:

    在控制器中,您需要加载用户及其答案:

    @reports = current_user.active_managements.includes(user: [:answers, :avatar] )
    
    在视图中,您需要将“where”更改为“detect”和“loop”,以遍历急切加载的对象。注意:这没有经过测试,我只是尝试一下。我希望它能让你走上正确的道路:

    <% @reports.each do |report| %>
      <% (@first_week..@current_week).each do |week_number| %>
        <% if report.user.answers.detect { |a| a.week_number == @current_week.to_s}.present? %>
            <%= image_tag report.user.avatar.url(:thumb), size: '30', class: 'img-circle media-object' %>
            <%= link_to "#{report.user.first_name + ' ' + report.user.last_name}", weekly_report_path(report.user.id, week_number) %>
            <%= report.user.due_date %>
            <%= week_number %>
        <% end %>
      <% end %>
    <% end %>
    
    
    
    您能分享您的报告和用户模型关系吗?如果能看到当前用户公司问题的解决方案也会很好
    <% @reports.each do |report| %>
      <% (@first_week..@current_week).each do |week_number| %>
        <% if report.user.answers.detect { |a| a.week_number == @current_week.to_s}.present? %>
            <%= image_tag report.user.avatar.url(:thumb), size: '30', class: 'img-circle media-object' %>
            <%= link_to "#{report.user.first_name + ' ' + report.user.last_name}", weekly_report_path(report.user.id, week_number) %>
            <%= report.user.due_date %>
            <%= week_number %>
        <% end %>
      <% end %>
    <% end %>