Pregunta

Estaba revisando el libro AWDR sobre desarrollo web con ruby ??on rails y uno de los problemas con el código anterior era que no usaba responder_to para asegurarme de que la vista utilizada fuera la vista de JavaScript. Ahora, en algunos ejemplos actualizados, he visto a personas mencionarlos más tarde, al implementar una degradación elegante, use request.xhr? para saber si el usuario tiene habilitado javascript y, si no, redirige al usuario.

Me preguntaba si podría usar respond_to para obtener el mismo comportamiento y, de ser así, si esto se considera una buena forma o no y ¿por qué?

Entonces, lo que estoy pensando hacer es algo como:

def function
  respond_to do |format|
    format.js do
      basic_stuff
    end
    format.html do
      basic_stuff
      user_redirect
    end
  end
end

Parece violar el principio DRY, y probablemente me falta algo sobre cómo el usuario y el servidor están interactuando aquí. Para ser sincero, la documentación de la API no me lo dejó completamente claro.

¿Fue útil?

Solución

Bueno, puedes refactorizar así:

def function
  basic_stuff # executed regardless of the mime types accepted
  respond_to do |format|
    format.html do
      user_redirect
    end
  end
  # will fall back rendering the default view - which you should ensure will be js
end

request.xhr? mira el encabezado X-Requested-With de la solicitud (para ver si contiene " XMLHttpRequest "). respond_to examina los tipos mime aceptados.

Puede usar cualquiera de los dos para implementar algún tipo de degradación elegante.

PERO No podrá usar xhr? para una degradación elegante a menos que sus llamadas ajax estén configurando ese encabezado (Prototype lo hace automáticamente).

Además, respond_to ofrece más flexibilidad, es decir, enviar xml, json, js, lo que sea desde el mismo bloque.

Así que recomendaría responder_to aquí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top