2010-01-14 11 views
58

La mia situazione: Visualizza l'azione di ReportsController deve rendere puro html, ma non come file (per visualizzarlo nel browser e salvarlo dopo). Quindi per il rendering, utilizzo il modello di vista view.html.erb e i neet per disattivare qualsiasi layout per questa azione. Ma in altre azioni di questo controller i layout dovrebbero rimanere intatti. funziona solo spegnendo per l'intero controllo in questo modo:Disattiva layout per una sola azione

ReportsController < ApplicationController 
    layout false 

Ma che facendo male :(per tutte le azioni ho cercato di usare qualcosa di simile in azione:

def view  
    @report = Report.new(params[:report]) 
    unless @report.valid? 
    render :action => 'new' and return 
    else 
    render :layout => false  
    end 
end 

COSA DEVO ? fare

+0

Beh, sicuramente non hanno bisogno che il ritorno esplicito. Vuoi il rendering del layout se il report è valido? – tfwright

risposta

59

Prova questo:

ReportsController < ApplicationController 
    layout false 
    layout 'application', :except => :view 
+0

Sembra che questa direttiva funzioni in modo errato (o imprevisto). Ho provato ad usare alcune combinazioni di questi parametri (: only,: except). Ma ha funzionato in modo strano rimuovendo tutti i layout per tutte le azioni. Penso che sia a causa di nil o false invece di 'layoutname'. E il sistema tenta di utilizzare i layout di "nome del controllore" per tutte le altre azioni che ignorano il layout dell'applicazione. Prova a giocare con questi parametri e capirai di cosa si tratta. – Antiarchitect

+2

Hai ragione, ': only' non funziona correttamente su' layout nil'. Sono stato in grado di farlo funzionare annuendo il layout e aggiungendolo di nuovo con l'eccezione, tuttavia. Ho aggiornato la mia risposta. – mckeed

+9

non 'nil' ma' false' – Paul

84

Questo dovrebbe farlo,

def view 
    ... 
    render :layout => false 
end 

Link to Documentation

+0

Il problema con questo è che dovresti specificare 'layout: false' per ogni formato nell'azione. – JellicleCat

+0

'format.html {layout di rendering: falso}' – dinjas

7

Nel blocco di rispondere, aggiungere layout: false.

Ad esempio:

respond_to do |format| 
    format.html { render :layout => false } # your-action.html.erb 
end 
Problemi correlati