2017-04-17 8 views
0

私はレールのチュートリアルを行ってきました。コントローラがビューをレンダリングするときに何が起こるのかを理解しようとしています。この議論のためのモデルを別に設定すると、コントローラがsome_viewの作業を行い、some_viewに帰着するレイアウトが標準のapplication.html.erbレイアウトですが、実際にここで何が起こっていますか?コントローラはビ​​ューを呼び出し、何らかの形でビューがレイアウトを呼び出し、レイアウトがビューに表示されますか?または、コントローラーが適切なレイアウトを探して、レイアウトがインテリジェントにビューに表示されますか?どういうわけか、コントローラー内のアクションと適切なビューとレイアウトがペアになりますが、アクションの実際の連鎖が何であるかはわかりません。チキン/卵:レールはビューのレイアウトを、レイアウトのビューを呼び出しますか?

+0

あなたはこれまでに読んだことがありますか?http://guides.rubyonrails.org/layouts_and_rendering.html – Iceman

+0

はい、私は私が探しているイベントの連鎖の簡潔な説明を見落としているかもしれません。 – AuroraTertius

+0

私は次のようなものを探していると思います。「Railsは同じ名前のビューを探し、ビューの特定のレイアウトが存在しない場合は標準レイアウトを呼び出し、レイアウトはビューに表示されます。これは起こっているようですが、実際には、それが再生されているビューのレイアウトルックアップであるかどうかを判断できません。 – AuroraTertius

答えて

0

ビューはコントローラから呼び出されます。したがって、posts_controller indexアクションは、コントローラと同じ名前のviewsフォルダを探し、action ... app/views/posts/index.html.erbと同じ名前のテンプレートを探します。これはあなたがすでに知っている

同様に、デフォルトではapp/views/layoutsフォルダ内でコントローラと同じ名前のレイアウトを探します。この場合、app/views/layouts/posts.html.erbが検索されます。この名前でファイルが見つからない場合は、デフォルトのレイアウトテンプレートとしてapp/views/layouts/application.html.erbがデフォルトになります。

Railsの魔法は、インデックステンプレートが<%= yield%>領域に入るように2つを組み合わせます。

+0

これは私の質問に答えるので、ありがとう。ビューがレイアウトを呼び出すように見えていたように見えましたが、レイアウトがビューに表示されます。ここではRailsの魔法があると受け入れますが、あなたが記述した決定木は決定的に意味があり、それは有用なことです。 – AuroraTertius

+0

あなたが本当にタマネギをはがしたい場合は、Railsのソースコードを直接見てください。 Railsは実際には11種類のRuby宝石の集合体です。レイアウトはAction_View宝石の一部です。 github https://github.com/rails/rails/blob/master/actionview/lib/action_view/layouts.rbの詳細を見ることができます –

関連する問題