首页 > 解决方案 > 如何在“索引”视图上列出嵌套属性值?

问题描述

我有一个名为“djobs”的表。该表有一个名为“rigs”的嵌套表,它通过“djob_id”列连接。每个 djob 都有与之关联的多个钻机。问题是,我在 djob 索引视图上显示了一个信息表。在此表中,我想显示每个 djob,并在每个 djob 中显示与该特定作业关联的每个钻机名称。我无法弄清楚如何只显示该特定 djob 的钻机名称。它总是显示每个 djob 中的每个钻机名称。

我尝试了网上找到的各种解决方案,但它们都会导致每个 djob 显示每个钻机名称,而不仅仅是与该特定 djob 关联的钻机。例如,对于作业 1,它应该显示装备“A”、“B”、“C”。但相反,它会显示曾经与 djob 关联的每个钻机名称。

控制器工作:

def index_photography
  @djobs = Djob.all.order(:id).includes(:rigs)
  @djob_id = @djobs.map(&:id)
  @djob_rigs = Rig.where(:djob_id => @djob_id)
end

模特工作:

class Djob < ActiveRecord::Base
  has_many :rigs
  accepts_nested_attributes_for :rigs, allow_destroy: true
end

模型钻机:

class Rig < ActiveRecord::Base
  belongs_to :djob
end

看法:

<tbody>
  <% @djobs.each do |djob| %>
    <tr>

      <td class="dotted" ><%= djob.jobtype %></td>

      <td class="dotted" >
        <% @djob_rigs.each do |rig| %>
          <%= rig.name %>
        <% end %>
      </td>

     </tr>
  <% end %>
</tbody>

我期望一个包含两列的表的视图:jobtype 和 rigs。其中每一行列出了一个作业类型以及与该 djob 关联的所有钻机名称。相反,我得到了与 djob 关联的作业类型和每个钻机名称。

标签: ruby-on-railsruby

解决方案


尝试joins改用includes. 它会rig与 a 相关联djob

def index_photography
  @djobs = Djob.order(:id).joins(:rigs)
end

<tbody>
  <% @djobs.each do |djob| %>
    <tr>
      <td class="dotted">
        <%= djob.jobtype %>
      </td>

      <td class="dotted" >
        <% djob.rigs.each do |rig| %>
          <%= rig.name %>
        <% end %>
      </td>
     </tr>
  <% end %>
</tbody>

.all没有必要。您也可以尝试从两个表中选择所需的列:

Djob.order(:id).joins(:rigs).select(:jobtype, 'rigs.name')

推荐阅读