已经和属于很多 - 显示表格视图中的所有记录

问题描述:

我有一个模型叫病人和病人已经和属于很多 - 显示表格视图中的所有记录

这个模型病人代表病人在医生的办公室。

我有性别填充了不同性别的名字

患者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> 

您可以使用to_sentence在集合。

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

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

&是安全航行,如果担心没有一个名字,那么以下.titleize不会炸毁的意思。

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

+0

感谢abax - 有没有'。'在第二个例子中不合适?当我尝试将其插入到代码中时出现语法错误。 – mike9182

+0

没有'&'只使用'name.titleize'就可以工作吗? Ruby 2.3.0中添加了安全导航操作符。可能取决于你的Ruby版本。我只能猜测不知道具体的错误。也许你可以发表评论。 – abax

你可以循环每个模型实例,例如:

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