2011-05-10 4 views
0

私はこのチュートリアルhttp://guides.rubyonrails.org/layouts_and_rendering.htmlに従っており、残りのHTMLテンプレートからヘッダーdivを分離しようとしています。UIレイヤーでRuby on Railsの利便性が低下する

私はその後、私は/アプリでhead.html.erbというファイルを作った私のアプリ/ビュー/ホーム/ index.html.erbファイルからdiv要素を取り出し、

<%= yield :head %> 

に置き換えています/ views/layoutsディレクトリに配置し、そこにdivを配置します。次に、このコードをdivに貼り付けます:

<% content_for :head do %> 
<% end %> 

しかし、それは動作せず、ヘッダーdivは表示されません。どこで私は間違えましたか?私はパスとディレクトリの不一致があると思いますが、私はそれらをどのようにマッチさせるか正確にはわかりません。

ありがとうございました!

答えて

3

あなたのレイアウトが働くことは決してありませんのレイアウトされていない場合、あなたのレイアウトファイル

<%= yield :head %> 

yieldコール、各ビューのテンプレートはcontent_forブロックを配置する場所です。アプリケーションのメインレイアウトファイルでyield呼び出しが必要になるでしょう。

のでapp/views/layouts/application.html.erbプットにあなたはそれになりたい場所をこの:

<div id="my_header_div"> 
    <%= yield :head %> 
</div> 

は次に、各ビューでは、あなたがこれを行うことができます:

<% content_for :head do %> 
    <h1>My Header!</h1> 
<% end %> 

をそして、それはあなたのレイアウトでdivの内側に挿入されますファイル。

+0

私はindex.html.erbに "%% yield:head%>"を入れましたが、divをレンダリングしていません。 head.html.erbを探すことだけを知っていますか? – GeekedOut

+0

いいえ、 'yield'は' app/views/layouts/application.html.erb'ファイルになければなりません。他のすべてのビューはデフォルトで使用されます。そしてあなたのテンプレート( 'index.html.erb'ファイルのようなもの)に' content_for'ブロックを置きます。 –

+0

おそらく、私はapplication.html.rbファイルの目的を誤解していました。テンプレートでインポートできるdivやcss/jsファイルを追跡するだけですか?テンプレートにはコードがありますか? – GeekedOut

1

あなたは、この置く必要があります:あなたのheadレイアウトがあなたの特定のアクションcontent_for :headはあなたが置く場所