3

ビューのレンダリングに関連するページタイトルやその他のきちんとしたものを設定するために、ビューをcontent_for使用することに慣れています。yield

そして今、私は次のスキームで立ち往生しています:LAYOUT-> VIEW(edit.html.erb)-> PARTIAL(_main.html)。つまり、ビューには部分が含まれています。

content_for :view_content_title, "Hello World"パーシャルで定義すると、レイアウトではアクセスできますが、ビューではアクセスできません-content_for?(:view_content_title)

なんで ?私はそれについて何をすべきですか?

4

2 に答える 2

9

理由がわかったと思います。Railsはビューを直線的にレンダリングします。ビューを部分的にレンダリングし、次に部分的にレンダリングし、次にビューの残りの部分をレンダリングします。content_for?パーシャルをレンダリングした後にビューでコンテンツを呼び出したりレンダリングしたりすると、コンテンツが存在しない場合は問題ないことをテストしました。

また、レイアウトはビューの後にレンダリングされます。これが、ビューとパーシャルがすでにレンダリングされているため、その時点でコンテンツがすでに利用可能である理由です。たとえば、ディレクティブが実行されます。

于 2013-03-11T12:56:41.337 に答える
1

考えられる回避策の1つは、レイアウトが:localsにアクセスできるため、次のようにすることができます。

view_file.html.erb

<%= render partial: "my_partial", layout:"my_layout", locals:{:title=>"Best Answer Ever"} %>

_my_layout.html.erb

<H1> <%= title %> </H1>
<%= yield %>

_my_partial.html.erb

All your content goes here, and this partial also has access to locals if you want to use them.

これにより、次のようになります。

<H1>Best Answer Ever</H1>
All your content goes here, and this partial also has access to locals if you want to use them.
于 2015-09-03T04:18:56.497 に答える