2010-01-14 5 views
58

Ma situation: L'action Voir de l'action de ReportsController devrait rendre le html pur, mais pas en tant que fichier (pour l'afficher dans le navigateur et le sauvegarder après). Donc, pour le rendu, j'utilise view template view.html.erb et je neet pour désactiver les mises en page pour cette action. Mais dans d'autres actions de ce contrôleur, les dispositions ne devraient pas être touchées. ne fonctionne que pour le contrôleur éteindre tout comme ceci:Désactiver la mise en page pour l'action

ReportsController < ApplicationController 
    layout false 

Mais ce faisant mal :(pour toutes les actions que je essayé d'utiliser quelque chose comme ceci dans l'action:

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

Que dois-je ? faire

+0

Eh bien, vous avez certainement pas besoin que le retour explicite. Voulez-vous que la mise en page soit rendue si le rapport est valide? – tfwright

Répondre

59

Essayez ceci:

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

Il semble que cette directive fonctionne mal (ou inattendue). J'ai essayé d'utiliser quelques combinaisons de ces paramètres (: only,: except). Mais ça a marché bizarrement en supprimant toutes les mises en page pour toutes les actions. Je pense que c'est à cause de nil ou false au lieu de 'layoutname'. Et le système essaie d'utiliser les mises en page 'controllername' pour toutes les autres actions en ignorant la mise en page de l'application. Essayez de jouer avec ces paramètres et vous comprendrez tout cela. – Antiarchitect

+2

Vous avez raison, ': only' ne fonctionne pas correctement sur' layout nil'. J'ai réussi à le faire fonctionner en remplissant la mise en page et en la rajoutant à l'exception, cependant. J'ai mis à jour ma réponse. – mckeed

+9

pas 'nil' mais' false' – Paul

84

Cela devrait le faire,

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

Link to Documentation

+0

Le problème avec ceci est que vous devez spécifier 'layout: false' pour chaque format de l'action. – JellicleCat

+0

'format.html {layout: false}' – dinjas

7

Dans le bloc de répondre, ajouter layout: false.

Par exemple:

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