ruby-on-rails - array - ruby select
Array.join("/ n") no es la forma de unirse a una nueva lĂnea? (7)
Tengo una matriz ...
[1,2,3,4]
y quiero una cadena que contenga todos los elementos separados por una nueva línea ...
1
2
3
4
pero cuando pruebo [1,2,3,4].join("/n")
me sale
1/n2/n3/n4
¡Siento que hay una respuesta obvia pero no puedo encontrarla!
¿Qué tal si quisieras imprimir cada elemento en una nueva línea?
> a = [1, 2, 3, 4]
> a.each{|e| puts e}
1
2
3
4
=> [1, 2, 3, 4]
Como algunas de las otras respuestas anteriores implican, Rails puede estar escapando de su código antes de representarlo como html. Aquí hay una muestra que resuelve este problema (primero desinfecte las entradas, para que pueda llamar "de manera segura" html_safe
al resultado):
my_array = [1, 2, 3, 4]
my_array.map{ |i| i.to_s.sanitize }.join("/n").html_safe
Solo necesita sanitize
si no confía en las entradas.
En caso de que alguien busque esta funcionalidad en la plantilla ERB, intente esto:
(1..5).to_a.join("<br>").html_safe
Prueba esto también:
puts (1..4).to_a * "/n"
Puede que no desee usar html_safe, como dijo ajay, según el contexto. La seguridad de HTML puede ser un problema de seguridad. Esto depende de si la entrada original fue realmente segura para html. No se debe invocar a HTML seguro en la entrada directa de un usuario y, por lo general, debe invocarse antes de la vista.
https://bibwild.wordpress.com/2013/12/19/you-never-want-to-call-html_safe-in-a-rails-template/
[editado en respuesta al comentario a continuación]
Sí, pero si imprime esa cadena tendrá nuevas líneas en ella:
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
Entonces parece lograr lo que deseas (?)
Un error sutil que puede ocurrir aquí es usar comillas simples en lugar de dobles. Eso también tiene el efecto de representar las líneas nuevas como / n. Asi que
puts a.join("/n") # correct
no es lo mismo que
puts a.join(''/n'') # incorrect
Hay un excelente escrito sobre por qué este es el caso here .