array ruby-on-rails ruby

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 .