2010-11-23 24 views
0

Quelle que soit la langue que j'utilise, j'ai toujours besoin d'afficher une liste de chaînes séparées par un délimiteur. Disons que j'ai une collection de produits et que je dois afficher ses noms séparés par ', '. J'ai donc une collection de produits, où chacun a un attribut 'nom'. Je cherche une méthode Rails/helper (si elle n'existe pas, peut-être vous pouvez me donner des idées pour la construire de façon rails) qui recevra une collection, un attribut/méthode qui sera appelé sur chaque item de la collection et une chaîne pour le séparateur.CONCAT_WS pour Rails?

Mais je veux quelque chose qui n'inclut pas le séparateur à la fin, parce que je vais finir avec "Notebook, Computer, Keyboard, Mouse," que 2 derniers caractères ne devraient pas être là.

Ex:

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

dispose de 4 @products En supposant des produits avec que les noms de cours.

Merci!

Répondre

1

vous devriez essayer l'assistant to_sentence.

Si vous avez un tableau, vous pouvez faire quelque chose comme

array.to_sentence. Si votre tableau a les données banane, pomme, chocolat il deviendra: banane, pomme et chocolat.

Alors maintenant, si vous avez votre modèle AR avec un champ nommé, vous pourriez faire quelque chose comme

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

J'aime l'aide de to_sentence, mais comment je peux faire un tableau de noms de produits ayant un tableau d'objets AR complets provenant d'une relation has_many? – emzero

+0

J'ai mis à jour ma réponse :-) –

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

Comme mentionné @VP, Array # to_sentence fait ce travail bien dans des rails. Le code est ici:

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

Dire que l'utilisation de l'Oxford Comma est discutable :-)

+0

Ouais, je n'aime pas cette Oxford Comma ... Heureusement, elle est facilement modifiable en utilisant les locales (support.array.last_word_connector), ce dont j'ai besoin car c'est un site multilingue =) – emzero