2011-01-31 4 views

答えて

18

技術的には、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 

レイアウトを考えるための最良の方法は、ブロックと呼ばれる方法である。

8

は、デフォルトでは、すべてのRubyの機能は、ブロックを渡すことができます。

Railsがテンプレートをレンダリングするとき、実際にはLayout#renderを呼び出しています。 Layout#renderはデフォルトのブロックを受け入れます。デフォルトでは、Railsはビューをこのブロックとして渡します。つまり、レイアウト内からyieldを呼び出すことは、デフォルトブロック(この場合はビュー)を呼び出すようなものです。

関連する問題