拥有并属于许多 - 在表格视图中显示所有记录

时间:2017-09-26 13:13:44

标签: ruby-on-rails has-and-belongs-to-many

我有一个名为患者和病人的模型

此模型患者代表医生办公室的病人。

我有一个填充了不同性别名称的性别模型

患者has_and_belongs_to_many:性别和性别has_and_belongs_to_many:患者。

我对种族,关注,保险有类似的实施。

在患者索引视图中,我试图向某些患者展示种族或种族,关注或担忧,保险或保险(他们可能没有,1或许多)。如何一次显示所有这些?我能够想出来的唯一方法是调用first.name,如下所示。谢谢!

<table>
  <tr>
      <th>Patient ID</th>
      <th>Created</th>
      <th>Created By</th>
      <th>Staff Clinician</th>
      <th>Concerns</th>
      <th>Gender</th>
      <th>Race</th>
      <th>Insurance</th>
      <th>Referral Request</th>
  </tr>

<% @patients.each do |patient| %>
  <tr>
    <td><%= patient.id %></td>
    <td><%= patient.created_at.strftime("%Y-%m-%d") %></td>
    <td><%= patient.user_id %></td>
    <td><%= patient.staff_clinician_id %></td>
    <td><%= patient.concerns.first.name %></td>
    <td><%= patient.genders.first.name %></td>
    <td><%= patient.races.first.name %></td>
    <td><%= patient.insurances.first.name %></td>
    <td><%= link_to "Show", patient %></td>
    <td><%= link_to "Edit", edit_patient_path(patient) %></td>
    <td><%= link_to "Remove", patient, method: :delete, data: { confirm: "Are you sure?" } %></td>
  </tr>
<% end %>
</table>

2 个答案:

答案 0 :(得分:1)

您可以遍历每个模型实例,例如:

<% patient.concerns.each do |concern| %>
    <td><%= concern.name %></td>
<% end %>

答案 1 :(得分:1)

您可以对集合使用to_sentence

<td><%= patient.concerns.map(&:name).to_sentence %></td>

<td><%= patient.concerns.map{ |concern| concern.name&.titleize }.to_sentence %></td>

&用于安全导航,这意味着如果问题没有名称,则以下.titleize不会爆炸。

无论如何,这种显示集合的方法在处理表时很好,因为只需要一个单元格来显示所有内容。