2011-02-09 6 views

Respuesta

18

Rails tiene un auto_link ayudante de texto.

auto_link("Go to http://www.rubyonrails.org and say hello to [email protected]") 
# => "Go to <a href=\"http://www.rubyonrails.org\">http://www.rubyonrails.org</a> and 
#  say hello to <a href=\"mailto:[email protected]\">[email protected]</a>" 

auto_link("Visit http://www.loudthinking.com/ or e-mail [email protected]", :link => :urls) 
# => "Visit <a href=\"http://www.loudthinking.com/\">http://www.loudthinking.com/</a> 
#  or e-mail [email protected]" 
+0

Nunca he oído hablar de eso. ¡Estupendo! – fl00r

+2

Si está utilizando Rails 3.1+, utilice rails_autolink según nikstep – Dean

+0

No se puede encontrar auto_link en el enlace que proporcionó. Documentación alternativa: http://apidock.com/rails/ActionView/Helpers/TextHelper/auto_link –

-3

En primer lugar, debe definir una expresión regular que coinciden con cadenas http, por ejemplo

 
IPv4_PART = /\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]/ # 0-255 
REGEXP = %r{ 
    https?://             # http:// or https:// 
    ([^\s:@]+:[^\s:@]*@)?          # optional username:[email protected] 
    ((([^\W_]+\.)*xn--)?[^\W_]+([-.][^\W_]+)*\.[a-z]{2,6}\.? | # domain (including Punycode/IDN)... 
     #{IPv4_PART}(\.#{IPv4_PART}){3})      # or IPv4 
    (:\d{1,5})?             # optional port 
    ([/?]\S*)?             
}iux 

continuación, supongamos que el cuerpo comentario es str, que hace:

 
str.gsub(REGEXP) do |m| 
    link_to m, m 
end 
+1

rodar su propia matcher URL es una muy mala idea - que va ** ** cometer un error. Usa una biblioteca. :) –

0

Usted podría también utilizar el "auto_html "gema, vea https://github.com/dejan/auto_html.

Descargo de responsabilidad: Aún no lo he usado, pero parece que podría hacer lo que quiera.

+0

Hace más de lo que preguntaba, lo cual es interesante, pero requiere una nueva joya. El auto_link es más simple. –

0

También me gustaría recomendar a pensar en algo así como Markdown por sus comentarios. Entonces puede dejar que el motor de Markdown se preocupe por cosas como esta para usted.

Cuestiones relacionadas