2010-11-23 12 views
0

Egal, welche Sprache ich verwende, muss ich immer eine Liste von Zeichenfolgen anzeigen, die durch ein Trennzeichen getrennt sind.CONCAT_WS für Schienen?

Nehmen wir an, ich habe eine Sammlung von Produkten und müssen ihre Namen getrennt von ', ' anzeigen. Also habe ich eine Sammlung von Produkten, wo jedes ein "name" -Attribut hat. Ich suche nach einer Rails-Methode/Helfer (wenn es nicht existiert, vielleicht können Sie mir Ideen geben, um es auf Schienen zu bauen), die eine Sammlung erhalten, ein Attribut/eine Methode, die für jedes Sammlungselement aufgerufen wird und eine Zeichenfolge für das Trennzeichen.

Aber ich möchte etwas, das das Trennzeichen am Ende nicht enthält, weil ich mit "Notebook, Computer, Tastatur, Maus" enden werde, dass 2 letzte Zeichen nicht da sein sollten.

Ex:

concat_ws(@products, :title, ", ") 
#displays: Notebook, Computer, Keyboard, Mouse 

Gesetzt @products hat 4 Produkte mit, dass die Namen natürlich.

Danke!

Antwort

1

sollten Sie versuchen, den Helfer to_sentence.

Wenn Sie ein Array haben, können Sie so etwas wie

array.to_sentence tun. Wenn Ihr Array die Daten Banane, Apfel, Schokolade hat, wird es: Banane, Apfel und Schokolade.

So, jetzt, wenn Sie Ihr AR-Modell mit einem Feld mit dem Namen haben, könnten Sie so etwas wie

MyModel.all.map { |r| r.name }.to_sentence 
+0

ich den to_sentence Helfer mögen, aber wie kann ich eine Reihe von Produktnamen machen mit ein Array von vollständigen AR-Objekten, die aus einer has_many-Beziehung stammen? – emzero

+0

Ich habe meine Antwort aktualisiert :-) –

1
@products.map(&:title).join(', ') 
1

Wie @VP erwähnt, Array # to_sentence übernimmt diese Aufgabe gut in Schienen zu tun. Der Code dafür ist hier:

https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/array/conversions.rb

aber sagen, dass die Verwendung des Oxford Comma fraglich ist :-)

+0

Yeah, mag ich nicht Oxford Comma ... Zum Glück ist leicht mit Localen (support.array.last_word_connector) bearbeitet werden, die ich sowieso brauche, weil es eine mehrsprachige Website ist =) – emzero