2010-02-16 11 views
2

J'ai essayé d'écrire le rendu dans une action, mais le comportement de mise en page est différent, pourquoi?Comment les rails fonctionnent-ils dans le contrôleur? Pourquoi quelque chose n'utilise pas la mise en page?

def show 
    # assuming we have a partial in app/views/shared/_panel_show.html.erb 
    #render "shared/_panel_show" # have layout 
    #render "/shared/_panel_show" # without layout 
    #render "shared/panel_show" # Template is missing 
    #render :partial => "shared/panel_show" # without layout 
    render :partial => "/shared/_panel_show",:layout => "application" # have layout 
end 

Je souhaite afficher une disposition de contrôleur partielle et conforme.

+0

En quoi est-ce différent? Ne devriez-vous pas faire: render: partial => "/ shared/panel_show",: layout => "application"? – marcgg

+0

Oui, je peux. Mais je veux utiliser la disposition définie par le contrôleur. Je ne veux pas modifier beaucoup d'endroits quand je change la disposition globale. – allenwei

Répondre

3

Le point entier d'un partiel est qu'il rend seulement une partie d'une vue et la rend sans aucune mise en page.

Je suggère de créer une nouvelle vue (et une action dans notre contrôleur), disons shared/full_panel_show, qui rend juste le partiel.

<%= render :partial => 'shared/panel_show' %> 

Maintenant, dans votre contrôleur render la nouvelle vue:

def show 
    render :action => 'shared/full_panel_show' 
end 

Selon ce que vous dopage en vue du spectacle, vous pouvez simplement rendre la partie de sa vue à la place.

+0

Comment expliquer #render "shared/_panel_show" # Disposition – allenwei

0

avoir une solution pour rendre une partielle avec la mise en page dans le contrôleur

render 'shared/_panel_show', layout: "layouts/application" 

simplement supprimer la méthode « partielle », puis ajouter underscore.