2010-11-03 12 views
8

basata su questa query:Rails: @cars di visualizzazione come un elenco separato da virgole

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

Come posso visualizzare gli ID delle vetture nella vista come questo (o devo riscrivere il mio query)?

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

Thanks a lot - ho cercato per questo, ma non riusciva a trovare il giusto domanda/risposta.


Una soluzione è quella di fare:

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

Non so se c'è un modo migliore per andare a questo proposito - questo lascia ovviamente una virgola randagio alla fine della lista (che isn è un dealbreaker). Qualche soluzione più elegante?

risposta

29

Una linea:

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

Grazie per quella meravigliosa risposta! Come posso realizzare la stessa cosa con un array? Ho [3,2,5,12,15 ...] in un array e ho solo bisogno di togliere le parentesi quadre. – sscirrus

+0

Semplicemente [3,2,5,12,15] .join (",") '. '@ Cars.map (&: id)' restituisce effettivamente una matrice contenente gli id. – PeterWong

8

Se la scrittura &:id sembra confuso, c'è un altro modo che è un po 'più leggibile .. Se tutti voi vuole accedere a un metodo o un attributo, potrebbe sembrare meglio inline un blocco .

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

P.S ... un altro nome per map è collect .. questo è quello che si chiama in Smalltalk.

Sembra buono!

5

Con Rails 3.0+ è ora possibile scrivere:

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

Rails in modo appropriato aggiungere i commenti e la parola 'e' tra gli ultimi due elementi.

Problemi correlati