2009-09-19 6 views

Respuesta

61

Sí, pero si imprime esa cadena hacia fuera que tendrá nuevas líneas en que:

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 

por lo que no aparecen para lograr lo que desea

5

probar este también (?):

puts (1..4).to_a * "\n" 
31

Un error sutil que puede ocurrir aquí es utilizar comillas simples en lugar de dobles. Eso también tiene el efecto de representar las líneas nuevas como \ n. Así

puts a.join("\n") # correct 

no es lo mismo que

puts a.join('\n') # incorrect 

Hay una excelente escritura sobre por qué este es el caso here.

+0

Gracias, funciona, pero no puedo entender por qué. – fangxing

+0

He editado la respuesta para incluir un enlace a la explicación de por qué funciona esto. – Screamer

6

Sólo en caso de cualquier persona que busca esta funcionalidad en la plantilla ERB continuación, intente esto:

(1..5).to_a.join("<br>").html_safe 
+0

Prefiero '(1..5) .to_a.join (" \ n ")', y en erb necesitas agregar estilo 'espacio-blanco: pre-wrap' – fangxing

0

¿Qué tal esto Si desea imprimir cada elemento en la nueva línea ..

> a = [1, 2, 3, 4] 
> a.each{|e| puts e} 
1 
2 
3 
4 
=> [1, 2, 3, 4] 
2

Usted puede No quiero usar html_safe, como dijo ajay, dependiendo del contexto. La seguridad de HTML puede ser un problema de seguridad. Esto depende de si la entrada original fue en realidad html safe. 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 a comentar a continuación]

+0

No necesariamente. Como dice la última línea de la entrada del blog, ** El código nunca debería llamar a html_safe en una cadena a menos que ese código construyera la cadena y realmente garantizara que es html-safety! **. Usar 'html_safe' * puede * estar bien, siempre y cuando comprenda lo que hace y comprenda que existen implicaciones de seguridad. Respuestas como esta son inútiles. – zelanix

+0

Veo ahora, por coincidencia, que ha editado la respuesta, eso es genial, y estoy de acuerdo con su nuevo trabajo. Solo una nota, si responde el comentario, puedo cambiar mi voto. – zelanix

+0

Sin embargo, como ahora tiene su representante de 50, tenga en cuenta que en el futuro esto sería más apropiado como comentario en lugar de como respuesta. – zelanix

Cuestiones relacionadas