2017-09-26 4 views
0

J'ai un modèle appelé les patients des patients et une tablea et appartient à un grand nombre - afficher tous les enregistrements en vue tableau

Ce modèle patient représente un patient dans le cabinet d'un médecin.

J'ai un modèle pour le genre peuplé avec des noms de genre

de has_and_belongs_to_many patient: sexe et sexe has_and_belongs_to_many: patients. J'ai une implémentation similaire pour la course, les préoccupations, les assurances.

Dans un index des patients, j'essaie de montrer une race ou des races de patients données, une préoccupation ou une préoccupation, une assurance ou une assurance (elles pourraient en avoir aucune, 1 ou plusieurs). Comment puis-je les montrer tous en même temps? La seule façon que j'ai pu comprendre pour en montrer est d'appeler first.name comme vu ci-dessous. Merci!

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

Répondre

1

Vous pouvez utiliser to_sentence sur les collections.

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

ou

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

Le & est pour la navigation en toute sécurité, ce qui signifie si le problème n'a pas de nom, puis n'explosera pas le .titleize suivi. Quoi qu'il en soit, cette approche de l'affichage de la collection est agréable lorsque vous travaillez avec des tables car il suffit d'une cellule pour tout afficher.

+0

Merci abax - y at-il un '.' déplacé dans votre deuxième exemple? Je reçois une erreur de syntaxe lorsque j'essaie de l'insérer dans mon code. – mike9182

+0

cela fonctionne-t-il sans le '&' juste en utilisant 'name.titleize'? L'opérateur de navigation sécurisé a été ajouté dans Ruby 2.3.0. Cela pourrait dépendre de votre version de Ruby. Je ne peux que deviner sans connaître l'erreur spécifique. Peut-être pourriez-vous l'afficher dans un commentaire. – abax

1

Vous pouvez boucler sur chaque instance de modèle, par exemple:

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