2009-04-12 6 views
12

Je suis novice en matière de rails et j'essaie de trouver comment obtenir des mises en page imbriquées; Je suppose qu'ils sont un peu comme des pages maîtres .net?Mises en page imbriquées en rubis sur rails

J'ai suivi this guide et j'ai créé un application.erb.html dans mon répertoire de mise en page qui contient ceci:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> 
    <title><%= @page_title or 'Page Title' %></title> 
    <%= stylesheet_link_tag 'layout' %> 
    <style type="text/css"><%= yield :stylesheets %></style> 
</head> 
<body> 

<%= yield(:content) or yield %> 

</body> 
</html> 

et ont modifié une de mes dispositions existantes à ceci:

<% content_for :stylesheets do %> 

<% end -%> 

<% content_for :content do %> 
    <p style="color: green"><%= flash[:notice] %></p> 
    <%= yield %> 
<% end -%> 

<% render :file => 'layouts/application' %> 

Quand je vais à l'un de mes affichages dans le navigateur, absolument rien n'est rendu; quand je regarde la source, il n'y a pas de code HTML.

Je suis sûr qu'il y a quelque chose d'élémentaire que j'ai manqué, quelqu'un peut le signaler s'il vous plaît ?!

+0

Copie possible de [Mise en page imbriquée de niveau multiple dans Rails 3] (http://stackoverflow.com/questions/6539239/multiple-level-nested-layout-in-rails-3) –

Répondre

29

Je travaille la solution, même si ce n'est pas ce qui est donné dans this article

J'ai remplacé cette ligne

<% render :file => 'layouts/application' %> 

avec

<%= render :file => 'layouts/application' %> 

Je ne sais pas si l'article est faux, ou j'ai trouvé la mauvaise façon de le réparer! S'il vous plaît, faites-moi savoir!

Vive

+0

vous a donné un vote parce que sauvé moi de la même confusion. – gabe

+0

+1, j'étais aussi confus. – dfrankow

+0

même; Merci. ça fait plus d'un an et l'erreur dans le guide persiste. : | – unsorted

4

L'article original avait une erreur et votre solution est correcte. Voici la raison:

La sortie du code ruby ​​dans un ERB (vue) qui est inclus dans <% =%> est ajoutée au code HTML généré et envoyé au navigateur. La sortie du code ruby ​​qui est encapsulée dans <%%> n'est pas ajoutée au code HTML. Donc appeler <% render: partial ...%> n'a aucun effet puisque le résultat de ce code ruby ​​(aller chercher le partiel) n'est pas ajouté au fichier HTML généré.

<%%> est généralement réservé aux conditionnelles et aux boucles, comme dans l'exemple ci-dessus.

Questions connexes