2

私は Rails のエントリー開発者で、Ruby 1.8.7 および Rails 3.0.3 で開発されたアプリケーションのシステム研究を行っています。私のアプリには application.html.erbレイアウトのapplication_controller と、 CRUD ビューに加えてhome_html.erbレイアウトのhome_controllerがあります。次に、routes.rbで、デフォルト ルートが以下のように設定され、ホームへのリソースフル ルーティングが設定されます。

root :to => 'home#index'

リソース :ホーム

application.html.rbには、 <%= yield %>を使用して他のビューを挿入する必要があるデフォルトのレイアウトがレンダリングされます。しかし、内容がapplication.html.erbの内容と同じであるhome.html.erb という別のレイアウトがあります。アプリを実行すると、デフォルトのレイアウトがapplication.html.erbではなくhome.html.erbから読み込まれます。その理由は何ですか?

4

3 に答える 3

5

あなたのコントローラーで書く

   class TetsController < ApplicationController
      layout "layout_name"
      #...
    end
于 2013-01-16T10:30:04.463 に答える
2

デフォルトでは、アプリケーション レイアウトはすべてのコントローラーに対して呼び出されますが、特定のレイアウトをレンダリングする場合は、これを行う必要があります。

class HomeController < ApplicationController
   layout 'home'
end

HTH

于 2013-01-16T10:31:28.847 に答える
2

デフォルトでは、コントローラは最初にレイアウトフォルダ内で同じ名前のテンプレートを探し、見つからない場合はデフォルトのアプリケーションレイアウトをレンダリングします。

このシナリオでは、home_controllerインデックス アクションが実行されると、 home.html.rbはコントローラーと同じ命名形式であるため、表示されるレイアウトはビュー コンテンツと共にhome.html.rbになります。これをhomes.html.rbに変更すると、コントローラーはレイアウト フォルダーからapplication.html.rbを取得します。したがって、解決策は、

views/layouts/フォルダーからhome.html.erbを削除するだけです。デフォルトでは自動的にapplication.html.erbをレンダリングします。

みんな、ありがとう。

于 2013-01-16T11:39:38.537 に答える