Ruby on Rails: link_to_remote sin Javascript (noscript)

November 13, 2007 at 20:35

Bueno, tras este confuso título se esconde un pequeño truco que me ha costado horrores encontrar. Estoy usando el framework Ruby On Rails para un proyecto personal y he decidido que ya soy mayor y puedo usar Ajax. El problema es que tuve una asignatura, Diseño Web Accesible, que corrompió mi mente para siempre y ahora me ando preocupando de si el navegador tiene o no Javascript y zarandajas así 🙄 .

La función link_to_remote proporciona la posibilidad de incluir un enlace que usa Javascript y XMLHttpRequest (es decir, Ajax 😛 ), pero si el navegador no dispone de Javascript o lo tiene desactivado, el enlace queda inútil, y no es lo más deseable sobretodo si ese enlace no tiene que usar Ajax por narices, aunque usarlo mejora la eficiencia y la experiencia del usuario.

Sin más preámbulos, os dejo un código de ejemplo de la función en la cuál se genera un enlace normal o uno tipo Ajax según la disponibilidad de Javascript en el navegador:

<%= link_to_remote _("login"), {
   :url => {:controller => "account", :action => "login", :layout => "false"}, # If JS
   :update => "content",
   :loading => "new Effect.Appear('loading_message', { duration: 0.5} ); ",
   :complete => "new Effect.Fade('loading_message', { duration: 0.3 }); " },
   :href  => url_for(:controller => "account", :action => "login") # If no JS
%>

Las líneas interesantes son la segunda y la última. La segunda especifica la acción para Javascript, mientras que la última especifica el destino del enlace cuando no existe Javascript. Ambas opciones ejecutan la acción login sobre el controlador account. La opción layout que se usa en caso de tener Javascript indica al método que no genere el HTML general que rodea al formulario (es decir, la cabecera de la página, el pié, etcétera) ya que sólo se va a recargar el contenido (como se ve en la opción :update). En el caso del enlace sin Javascript, sí necesitamos dicho HTML ya que se recargará la página completa.

Edito: Recomiendo encarecidamente que si has llegado hasta aquí usando Google leas esta entrada del blog Ruido Blanco que nos apunta su creador en un comentario. Tanto el contenido de la entrada como las posteriores aclaraciones de los comentarios me han ayudado muchísimo a comprender cómo funciona Rails y incluso el protocolo HTTP 🙂

Fuente (madrecita lo que me ha costado encontrarla 😆 ): Rails Track