2010-11-03 15 views
8

Sur la base de cette requête:Rails: affichage @cars comme une liste séparée par des virgules

@cars = Car.where("manufacturer_id IN ?", @mfts.select("id")).limit(30).select("id") 

Comment puis-je afficher les ID des voitures dans la vue comme celui-ci (ou dois-je besoin de réécrire ma requête)?

3,2,5,12,15,24,34,63,64,65,66,85

Merci beaucoup - j'ai regardé pour cela, mais n'a pas pu trouver la bonne question/réponse.


Une solution consiste à faire:

#view 
<% @cars.each do |c| %><%= c.id %>,<% end %> 

Je ne sais pas s'il y a une meilleure façon d'aller à ce sujet - cela laisse évidemment une virgule parasite à la fin de la liste (qui ISN 't un dealbreaker). Des solutions plus élégantes?

Répondre

29

Une ligne:

<%= @cars.map(&:id).join(",") %> 
+0

Merci pour cette merveilleuse réponse! Comment puis-je accomplir la même chose avec un tableau? J'ai [3,2,5,12,15 ...] dans un tableau et j'ai juste besoin de supprimer les crochets. – sscirrus

+0

Simplement '[3,2,5,12,15] .join (", ")'. Le '@ cars.map (&: id)' retourne un tableau contenant les identifiants. – PeterWong

8

Si l'écriture &:id semble confus, il y a une autre façon qui est un peu plus lisible .. Si vous tous veulent accéder à une méthode ou un attribut, il peut sembler mieux inline un bloc .

<%= @cars.map { |car| car.id }.join(", ") %> 

P.S ... un autre nom pour map est collect .. c'est ce qu'il appelle en Smalltalk.

Belle apparence!

5

Avec Rails 3.0+, vous pouvez maintenant écrire:

<%= @cars.map { |car| car.id }.to_sentence %> 

Rails ajouter de manière appropriée les commentaires et le mot « et » entre les deux derniers éléments.

Questions connexes