我有一个名为“ 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相关联的每个装备名称。
答案 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')