2011-09-22 4 views
10

<%= yield %>タグが1つある場合、レイアウト内のすべてのビューが同じ場所にレンダリングされます。さまざまなビューに対して異なる<%= yield %>タグを使用できますか?それで私はこれをどうやってやるの?ありがとうRuby on rails:レイアウト内の特定の場所で特定のビューを取得する

+0

コンテンツを含むビューがどのフォルダにあるかは重要ですか?ビューはどのコントローラから来ていますか? – holaSenor

答えて

22

ActionView::Helpers::CaptureHelperを参照してください。あなたは、あなたの意見では、このような何かを行うことができます。

<% content_for :sidebar do %> 
    <!-- sidebar content specific to this page --> 
<% end %> 

これはcontent_forブロック内のテンプレートを実行しますが、出力は通常のテンプレートyieldバッファの一環として、それは後で別のバッファに格納されません。 。その後、後に、レイアウトを含め、あなたが出力するコンテンツyield :content_nameを使用することができます:あなたは、異なるビューごとに異なるyield Sを持つことができるので意味で

<div class="content"> 
    <%= yield %> 
</div> 

<div class="sidebar"> 
    <%= yield :sidebar %> 
</div> 

を、あなただけで異なる内容に名前を与える必要がありビュー内でcontent_forを選択し、レイアウト内で同じ名前を付けます。

さまざまな場所でさまざまなビューが必要な場合を考えてみましょう。 panel1、panel2、panel3の3つのパネルがあるとします。あなたのレイアウトでこれを行うことができます:

<div id="panel1"><%= yield :panel1 %></div> 
<div id="panel2"><%= yield :panel2 %></div> 
<div id="panel3"><%= yield :panel3 %></div> 

あなたも、あなたがしたくない場合は、プレーン<%= yield %>を含める必要はありません。次に、適切なcontent_forを使用して、ビュー全体を囲むことによってコンテンツを表示するパネルを選択することができます。このように、もう一つは、パネル3のために意図されることがありますパネル2に表示するには

<% content_for :panel2 do %> 
    <!-- Your View --> 
<% end %> 

:たとえば、あなたの意見の一つは次のように変更される場合があります

<% content_for :panel3 do %> 
    <!-- Your View --> 
<% end %> 
+0

これは、ほとんどのEgbertページをカスタマイズしたいページタイトルには適していますが、すべてのページでそれを指定する必要があります。それは、認証ページだけにサイドバーを隠すようなものには適していません。 – ahnbizcad

1

はい、複数の<%= yield %>タグを持つことができます。それぞれのyieldタグをベースビューで指定することができます。

<%= yield :head %>

<%= yield :footer %>

次に、あなたの個々のビューにcontent_forタグを使用します。

<% content_for :head do %> 
    <%= stylesheet_link_tag 'custom' %> 
<% end %> 
0

あなたが降伏を使用することができますし、コンテンツのため:

For example: 
<%= yield :head %> 
<% content_for :head do %> 
    <title>A simple page</title> 
<% end %> 
関連する問題