2010-11-03 6 views
8

auf dieser Abfrage basiert:Rails: Anzeige @cars als durch Kommata getrennte Liste

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

Wie kann ich die Autos IDs in der Ansicht angezeigt werden wie folgt aus (oder muss ich meine Abfrage neu zu schreiben)?

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

Vielen Dank - ich habe dafür sah, konnte aber die richtige Frage/Antwort nicht finden.


Eine Lösung ist zu tun:

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

Ich weiß nicht, ob es einen besseren Weg, um darüber zu gehen ist - dies offensichtlich eine verirrte Komma am Ende der Liste verlässt (was isn 't ein Dealbreaker). Noch elegantere Lösungen?

Antwort

29

Eine Zeile:

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

Danke für diese wunderbare Antwort! Wie kann ich dasselbe mit einem Array erreichen? Ich habe [3,2,5,12,15 ...] in einem Array und muss nur die eckigen Klammern entfernen. – sscirrus

+0

Einfach '[3,2,5,12,15] .join (", ")'. Die '@ cars.map (&: id)' gibt tatsächlich ein Array zurück, das die IDs enthält. – PeterWong

8

Wenn das Schreiben &:id verwirrend scheint, gibt es eine andere Art und Weise, die ein wenig mehr lesbar ist .. Wenn y'all, ein Verfahren oder ein Attribut zugreifen möchten, könnte es besser aussehen um einen Block Inline- .

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

P. S ... ein anderer Name für map ist collect .. das ist, was es in Smalltalk genannt wird.

Sieht gut aus!

5

Mit Rails 3.0+ Sie jetzt schreiben:

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

Rails wird in geeigneter Weise die Kommentare und das Wort ‚und‘ zwischen den letzten beiden Elemente hinzuzufügen.

Verwandte Themen