例: content_for(:stuff)
vsyield :stuff
実装方法が少し異なることは知っていますが、実際の機能の違いはありますか?
一般的に受け入れられているベストプラクティスはありますか?
例: content_for(:stuff)
vsyield :stuff
実装方法が少し異なることは知っていますが、実際の機能の違いはありますか?
一般的に受け入れられているベストプラクティスはありますか?
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
をレンダリングすることに固執することです。
収率:
イールドは、ビューのコンテンツを挿入する必要があるセクションを識別します
content_for:
content_forメソッドを使用すると、レイアウト内の名前付きのyieldブロックにコンテンツを挿入できます。たとえば、このビューは、今見たレイアウトで機能します。
yield :stuff
によってプッシュされたコンテンツを取得しますcontent_for(:stuff)
したがって、を使用yield
すると、ビュー/レイアウトでセクションを定義し、content_for
それらのセクションにコンテンツを追加するために使用できます。名前のないyield
ものは、他のすべてのコンテンツを取得します。
チュートリアルを読んで、それについてもっと学ぶことができます。
#content_forを呼び出すと、後で使用できるようにマークアップのブロックが識別子に格納されます。他のテンプレート、ヘルパーモジュール、またはレイアウトでこの保存されたコンテンツにアクセスするには、content_forの引数として識別子を渡します。格納されたコンテンツを取得するためにyieldを引き続き使用できますが、inieldの呼び出しはヘルパーモジュールでは機能しませんが、content_forは機能します....詳細:http ://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html #method-i-content_for
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