2012-07-02 8 views
12

Ho cercato in giro e non sono stato in grado di trovare una soluzione per questo tipo di meccanico. Voglio caricare tutte le pagine normalmente in Rails, ma ogni volta che faccio una richiesta Ajax voglio solo restituire la pagina senza il layout. Quindi, ogni volta che faccio un requst ajax, posso aggiungere uno ?page=true o qualcosa del genere e fare in modo che Rails restituisca la pagina senza il layout.I binari impediscono il layout durante la richiesta AJAX

È possibile? C'è un modo migliore per farlo che mi manca?

Grazie per qualsiasi aiuto!

Soluzione Finale Codice lavoro:

Nel regolatore di tutto quello che dovete fare è aggiungere un po 'di logica al format.html nel blocco respond_to.

Nel metodo show ad esempio

def show 
    # code beforehand 

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

E questo è tutto! Impedisci layout durante le richieste AJAX!

Nota: Grazie al commento di Smathy sulla sua risposta questo è stato ulteriormente semplificato. Originariamente avevo format.html { render :layout => nil if request.xhr? } Questa soluzione funziona altrettanto bene, ma la modifica di Smathy lo rende ancora più semplice.

+0

È possibile fare lo stesso nel controller dell'applicazione per ogni richiesta Ajax? –

+0

possibile duplicato di [Non eseguire mai il rendering di un layout in risposta a xhrs] (http://stackoverflow.com/questions/2444866/never-render-a-layout-in-response-to-xhrs) – fivedigit

risposta

8

Non è necessario aggiungere questo parametro, request.xhr? restituirà true nel controller quando si tratta di una richiesta Ajax. Basta usarlo per decidere se rendere il layout o meno.

+0

Come funzionerebbe? Ho provato 'se request.xhr? render: layout => nil end' nel controller dello spettacolo. Sta restituendo un errore O non sto usando request.xhr? correttamente o sto cercando di rimuovere il layout in modo errato. – KayoticSully

+1

Sono stato in grado di capirlo, grazie per le informazioni. Modificherò la domanda con il mio effettivo codice finale di lavoro. Grazie alle tue informazioni, la mia soluzione è molto simile a "Rails Like" e ne sono estremamente felice! – KayoticSully

+3

Bella soluzione, sì. Un'alternativa è usare lo stesso booleano - ma negato. Per esempio. Vorrei fare: 'render: layout =>! Request.xhr?' – smathy

Problemi correlati