12

例: content_for(:stuff)vsyield :stuff

実装方法が少し異なることは知っていますが、実際の機能の違いはありますか?

一般的に受け入れられているベストプラクティスはありますか?

4

4 に答える 4

37

yieldコンテンツ領域がレイアウト内のどこに配置されるかを指定する方法です。あなたはこのようなものを持っているかもしれません:

<div>
  <h1> This is the wrapper!</h1>
  <%= yield :my_content %>
</div>

content_forどのコンテンツがどのコンテンツ領域にレンダリングされるかを指定する方法です。あなたはこのようなものを持っているかもしれません:

<% content_for :my_content do %>
  This is the content.
<% end %>

結果は次のようになります

<div>
  <h1> This is the wrapper!</h1>
  This is the content.
</div>

これらはレンダリングプロセスの反対側であり、yieldコンテンツの行き先をcontent_for指定し、実際のコンテンツ何であるかを指定します。

一般的に受け入れられているベストプラクティスはありますか?

ベストプラクティスはyield、レイアウトとcontent_forビューで使用することです。の特別な2番目の使用法がcontent_forあります。ここでは、ブロックを指定せず、以前にレンダリングされたコンテンツを返します。これは主に、機能しないヘルパーメソッドで使用するためのものyieldです。ビュー内でのベストプラクティスはyield :my_content、コンテンツをリコールし、コンテンツcontent_for :my_content do...endをレンダリングすることに固執することです。

于 2012-10-31T03:58:56.273 に答える
3

収率:

イールドは、ビューのコンテンツを挿入する必要があるセクションを識別します

content_for:

content_forメソッドを使用すると、レイアウト内の名前付きのyieldブロックにコンテンツを挿入できます。たとえば、このビューは、今見たレイアウトで機能します。

yield :stuffによってプッシュされたコンテンツを取得しますcontent_for(:stuff)

したがって、を使用yieldすると、ビュー/レイアウトでセクションを定義し、content_forそれらのセクションにコンテンツを追加するために使用できます。名前のないyieldものは、他のすべてのコンテンツを取得します。

チュートリアルを読んで、それについてもっと学ぶことができます。

于 2012-10-31T03:51:20.367 に答える
2

#content_forを呼び出すと、後で使用できるようにマークアップのブロックが識別子に格納されます。他のテンプレート、ヘルパーモジュール、またはレイアウトでこの保存されたコンテンツにアクセスするには、content_forの引数として識別子を渡します。格納されたコンテンツを取得するためにyieldを引き続き使用できますが、inieldの呼び出しはヘルパーモジュールでは機能しませんが、content_forは機能します....詳細:http ://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html #method-i-content_for

于 2016-03-16T19:21:50.903 に答える
2

Ruby on Rails APIから:

呼び出しcontent_forは、後で使用するためにマークアップのブロックを識別子に格納します。他のテンプレート、ヘルパーモジュール、またはレイアウトでこの保存されたコンテンツにアクセスするには、識別子を引数としてに渡しますcontent_for

注:yield保存されたコンテンツを取得するために引き続き使用できますがyield、ヘルパーモジュールでは呼び出しは機能しませんが、content_for機能します。

content_for :not_authorizedその後、テンプレートのどこでも使用できます。

<%= content_for :not_authorized if current_user.nil? %>

これは次と同等です。

<%= yield :not_authorized if current_user.nil? %>

content_forただし、ヘルパーモジュールでも使用できます。

https://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

于 2018-08-10T14:40:17.343 に答える