ruby-on-rails - 如何在“索引”视图上列出嵌套属性值?
问题描述
我有一个名为“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 关联的作业类型和每个钻机名称。
解决方案
尝试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')
推荐阅读
- css - 如何在引导程序中拥有 100% 的剩余空间?
- c++ - 保存格式化文本 Qt 的文件
- python - Python如何删除列表元素之间存在的\ n?
- javascript - 从 Firestore 到 vue js Composition Api 中的对象数组的结果
- flutter - 如何在 Text.rich() 中对齐文本中心
- javascript - Discord.js 将机器人角色设置为最高
- javascript - 如何在 React 中用按钮的 innerText 填充输入并同时从键盘输入?
- android - Android将农历日期转换为公历日期
- ios - 滑动以推送视图控制器,如 Whatsapp 消息详细信息
- c++ - Og 标志如何影响内联函数 optimist 上的 gcc