yield
はブロックの呼び出しに使用されます。レイアウトでyield
が使用されているRailsではどのように動作しますか?Ruby on Railsはレイアウトの利回りをどのように使用しますか?
-# application.html.haml
%body= yield
どこかブロックを使用するのか、メソッドが単純にオーバーライドされますか?
yield
はブロックの呼び出しに使用されます。レイアウトでyield
が使用されているRailsではどのように動作しますか?Ruby on Railsはレイアウトの利回りをどのように使用しますか?
-# application.html.haml
%body= yield
どこかブロックを使用するのか、メソッドが単純にオーバーライドされますか?
技術的には、yield
もこのコンテキストでブロックを呼び出しています。ただし、ブロックは、コントローラのアクションにレンダリングするように指示されたビューです。
たとえば、ホームページを表すindex
アクションがあるStaticContentController
があるとします。ルートが正しく設定されていると、ホームページにアクセスします。 Railsは、そのコントローラに適切なviews/layouts
のレイアウトファイルをロードします(コントローラのレイアウトでこれをオーバーライドしない限り、application.html.haml
)。 yield
コマンドに達すると、yield
がレイアウト内にある場所にviews/static_content/index.html.haml
というビューが挿入されます。次に、残りのレイアウトファイルを読み込みます。
def twice yield yield end > twice { print 'hi ' } => hi hi
レイアウトを考えるための最良の方法は、ブロックと呼ばれる方法である。
は、デフォルトでは、すべてのRubyの機能は、ブロックを渡すことができます。
Railsがテンプレートをレンダリングするとき、実際にはLayout#renderを呼び出しています。 Layout#renderはデフォルトのブロックを受け入れます。デフォルトでは、Railsはビューをこのブロックとして渡します。つまり、レイアウト内からyieldを呼び出すことは、デフォルトブロック(この場合はビュー)を呼び出すようなものです。