如何在“索引”视图上列出嵌套的属性值?

时间:2019-08-05 19:44:03

标签: ruby-on-rails ruby

我有一个名为“ djobs”的表。该表具有名为“ rigs”的嵌套表,该表通过列“ djob_id”连接。每个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相关联的每个装备名称。

1 个答案:

答案 0 :(得分:1)

尝试使用joins代替includes。它将获得与rig关联的任何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')