我的应用程序有一些静态内容:
root :to => 'pages#home'
match '/about', :to => 'pages#about'
match '/contact', :to => 'pages#contact'
match '/help', :to => 'pages#help'
我希望这些页面共享一个布局,而不是复制每个文件中的页眉/页脚。
我发现的布局的唯一文档似乎表明我应该在控制器级别指定我的布局,这是正确的吗?
如果是这样,应该如何给出我的静态页面布局?我看到的唯一解决方法是为每个页面创建一堆空控制器,其唯一目的是指定一个公共布局文件,但这有点像过度杀伤。
我错过了一招吗?
感谢您的帮助
答案 0 :(得分:3)
是,在控制器级别设置布局。您可以为这组页面创建一个控制器,如下所示:
class AboutController < ApplicationController
layout "about"
def about
end
def contact
end
def help
end
end
我倾向于使用名称“AboutController”来做这类事情,以避免与完全不通过控制器的静态文件混淆。但你可以随心所欲地命名它。
将路线指向它(例如about#contact
)。然后在app/views/layouts/about.html.erb
如果您需要更改特定操作的布局,可以使用render
方法的:layout
选项:
def something_special
render :layout => "other"
end
如果您根本不需要布局,也可以传递false,例如robots.txt。
答案 1 :(得分:2)
如果要为所有静态页面设置一个布局(例如没有布局),请创建文件config/initializers/high_voltage.rb
并放置
HighVoltage.configure do |config|
config.layout = 'your_layout' # false for no layout
end
答案 2 :(得分:0)
根据GoodEnough的评论,您可以使用像high_voltage
这样的宝石默认使用“应用程序”布局,但您可以通过以下两种方式之一更改此选项:
HighVoltage.layout = 'foobar'
- 如果所有静态页面都具有相同的布局
创建自己的PagesController:
class PagesController < HighVoltage::PagesController
layout 'foobar'
请参阅docs的覆盖部分以获取完整信息。