2012-07-02 7 views
12

He buscado y no he podido encontrar una solución para este tipo de mecánico. Quiero cargar todas las páginas normalmente en Rails, pero cada vez que hago una solicitud de Ajax solo quiero devolver la página sin el diseño. Entonces, cada vez que hago un ajax, puedo adjuntar un ?page=true o algo así y hacer que Rails devuelva la página sin el diseño.Los rieles impiden el diseño durante la solicitud de AJAX

¿Esto es posible? ¿Hay una mejor manera de hacerlo que me estoy perdiendo?

¡Gracias por cualquier ayuda!

Código de Trabajo solución final:

En el controlador de todo lo que tiene que hacer es añadir un poco de lógica a la format.html en el bloque respond_to.

En el método show por ejemplo

def show 
    # code beforehand 

    respond_to do |format| 
     format.html { render :layout => !request.xhr? } 
     # other formats 
    end 
end 

Y eso es todo! ¡Prevenga los diseños durante las solicitudes de AJAX!

Nota: Gracias al comentario de smathy sobre su respuesta, esto se simplificó aún más. Originalmente tenía format.html { render :layout => nil if request.xhr? } Esta solución funciona igual de bien, pero la modificación de smathy lo hace aún más simple.

+0

¿Es posible hacer lo mismo en el controlador de la aplicación para cada solicitud de Ajax? –

+0

posible duplicado de [Nunca renderizar un diseño en respuesta a xhrs] (http://stackoverflow.com/questions/2444866/never-render-a-layout-in-response-to-xhrs) – fivedigit

Respuesta

8

No necesita agregar ese parámetro, request.xhr? devolverá verdadero en su controlador cuando se trate de una solicitud de Ajax. Solo use eso para decidir si renderizar el diseño o no.

+0

¿Cómo funcionaría? Intenté 'si request.xhr? render: layout => nil end' en el controlador de show. Está devolviendo un error. ¿O no estoy usando request.xhr? correctamente o estoy tratando de eliminar el diseño incorrectamente. – KayoticSully

+1

Pude averiguarlo, GRACIAS por la información. Editaré la pregunta con mi código de trabajo final real. Gracias a su información, mi solución es muy similar a "Rails Like" y estoy muy contento con ella. – KayoticSully

+3

Buena solución, sí. Una alternativa es usar el booleano mismo, pero negado. P.ej. Haría: 'render: layout =>! Request.xhr?' – smathy

Cuestiones relacionadas