2013-01-16 76 views
1

我是Rails的入門開發人員,我正在開發使用Ruby 1.8.7和Rails 3.0.3開發的應用程序的系統研究。在我的應用程序,我有application_controllerapplication.html.erb佈局和用home_html.erb佈局CRUD意見沿home_controller。然後在我的routes.rb中,默認路由設置爲如下所示以及家庭的資源路由。在Rails 3中不渲染默認的應用程序佈局

根:到=> '回家#指數'

資源:家

application.html.rb,我們默認佈局要呈現在其內部的其他意見需要使用<%=產率%>來插入。但我有另一個版面,稱爲home.html.erb,其內容與application.html.erb相同。當我運行應用程序時,默認佈局從home.html.erb加載,而不是application.html.erb。可能是什麼原因?

+0

小心解釋爲什麼downvoted? –

回答

2

默認情況下,控制器將首先尋找模板與 同名內佈局文件夾如果沒有找到,它會 渲染默認應用程序佈局。

在這種情況下,當執行home_controller索引作用,呈現的佈局是home.html.rb以來home.html.rb視圖內容一起是具有相同的命名格式如的控制器。當我將其更改爲homes.html.rb時,控制器從layouts文件夾中取得application.html.rb。 因此,解決辦法是,

剛剛從的意見/佈局/文件夾中刪除home.html.erb。它會默認爲 自動渲染application.html.erb

謝謝大家。

+0

@Sachin R:謝謝你的幫助。 –

+0

@ sameera207:感謝您的幫助。 –

5

在你的控制器寫入

class TetsController < ApplicationController 
     layout "layout_name" 
     #... 
    end 
+0

我不想呈現任何特定的佈局。我需要呈現應用程序佈局,並且應該默認完成。對?這對我來說不是什麼事情。我們沒有在home_controller中指定佈局'home'。那麼爲什麼它呈現'home.html.erb'佈局? –

+1

這可能是因爲您的控制器名稱是'HomeController'而不是'HomesController'。您的控制器名稱單數,但軌道約定是我們的控制器類是像ProductsController,BooksController等複數... –

+0

然後爲什麼application_controller,爲什麼不是applications_controller? –

2

默認應用程序佈局將被調用到所有的控制器,但如果你想呈現一個特定的佈局,你應該這樣做

class HomeController < ApplicationController 
    layout 'home' 
end 

HTH

+0

我不想呈現任何特定的佈局我需要應用程序佈局呈現,它應該默認完成。這就是爲什麼我沒有發生,我們沒有在home_controller中指定佈局'home',那麼爲什麼它會呈現'home.html.erb'佈局? –

+1

哦,對不起,我誤解了你的問題。因爲你有一個'home'佈局,所以它有優先於'application'的佈局,所以你有兩個選擇,1)調用'application'佈局來自home_controller。 2)刪除'家'佈局(我認爲(1)更實際) – sameera207

+0

請你澄清(1)可能是一個很好的選擇,因爲我們有application.html.erb和home.html.erb相同內容?此外,爲什麼我們需要從home_controller顯式調用應用程序佈局,因爲它將默認完成? –