J'ai un tableau ..
[1,2,3,4]
et je veux une chaîne contenant tous les éléments séparés par une nouvelle ligne.
1
2
3
4
mais quand j'essaie [1,2,3,4].join("\n")
je reçois
1\n2\n3\n4
J'ai l'impression qu'il y a une réponse évidente mais je ne la trouve pas!
Oui, mais si vous imprimez cette chaîne, il y aura des nouvelles lignes:
irb(main):001:0> a = (1..4).to_a
=> [1, 2, 3, 4]
irb(main):002:0> a.join("\n")
=> "1\n2\n3\n4"
irb(main):003:0> puts a.join("\n")
1
2
3
4
Donc, il semble réaliser ce que vous désirez (?)
Une erreur subtile qui peut se produire ici consiste à utiliser des guillemets simples au lieu de doubles. Cela a également pour effet de rendre les nouvelles lignes en\n. Alors
puts a.join("\n") # correct
n'est pas la même chose que
puts a.join('\n') # incorrect
Il existe une excellente description de la raison pour laquelle c'est le cas ici .
Juste au cas où ceux qui recherchent cette fonctionnalité dans le modèle ERB essaient ceci:
(1..5).to_a.join("<br>").html_safe
Essayez ceci aussi:
puts (1..4).to_a * "\n"
Vous pouvez ne pas vouloir utiliser html_safe, comme ajay, selon le contexte. Html safe peut être un problème de sécurité. Cela dépend si l'entrée d'origine était réellement html safe. Le coffre-fort HTML ne doit pas être appelé directement par un utilisateur et doit généralement être appelé avant la vue.
https://bibwild.wordpress.com/2013/12/19/you-never-want-tocall-html_safe-in-a-Rails-template/
[édité en réponse au commentaire ci-dessous]
Que diriez-vous de cela si vous vouliez imprimer chaque élément sur une nouvelle ligne?.
> a = [1, 2, 3, 4]
> a.each{|e| puts e}
1
2
3
4
=> [1, 2, 3, 4]
Comme le suggèrent certaines des réponses ci-dessus, il est possible que Rails échappe à votre code avant le rendu au format HTML. Voici un exemple qui résout ce problème (commencez par nettoyer les entrées afin de pouvoir appeler "en toute sécurité" le html_safe
dans le résultat):
my_array = [1, 2, 3, 4]
my_array.map{ |i| i.to_s.sanitize }.join("\n").html_safe
Vous n'avez besoin que de sanitize
si vous ne faites pas confiance aux entrées.
Utilisez la touche Entrée ou Retour sur votre surface de frappe. .-.
[1,2,3,4] .join ("
")