2010-11-03 14 views
8

basado en esta consulta:Rieles: visualización @cars como una lista separada por comas

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

¿Cómo puedo mostrar los ID de los coches en la vista como esta (o tengo que volver a escribir mi consulta)?

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

Muchas gracias - He buscado para esto, pero no pudieron encontrar el derecho de pregunta/respuesta.


Una solución es hacer:

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

No sé si hay una mejor manera de hacerlo - esto, obviamente, deja una coma perdida al final de la lista (que ISN no es un dealbreaker). ¿Alguna solución más elegante?

Respuesta

29

Una línea:

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

Gracias por esa maravillosa respuesta! ¿Cómo puedo lograr lo mismo con una matriz? Tengo [3,2,5,12,15 ...] en una matriz y solo necesito quitar los corchetes. – sscirrus

+0

Simplemente '[3,2,5,12,15] .join (", ")'. El '@ cars.map (&: id)' en realidad devuelve una matriz que contiene los ids. – PeterWong

8

Si escribir &:id parece confuso, no hay otra manera que sea un poco más fácil de leer .. Si ustedes quieren acceder a un método o atributo, podría verse mejor a inline un bloque .

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

P.S ... otro nombre para map es collect .. eso es lo que se llama en Smalltalk.

¡Lookin 'bueno!

5

con rieles 3.0+ ahora se puede escribir:

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

Rails añadir apropiadamente los comentarios y la palabra 'y' entre los dos últimos elementos.

Cuestiones relacionadas