Rails指定静态页面的布局

时间:2012-01-12 14:32:11

标签: ruby-on-rails ruby-on-rails-3 layout

我的应用程序有一些静态内容:

root :to => 'pages#home'
match '/about',   :to => 'pages#about'
match '/contact', :to => 'pages#contact'
match '/help',    :to => 'pages#help'

我希望这些页面共享一个布局,而不是复制每个文件中的页眉/页脚。

我发现的布局的唯一文档似乎表明我应该在控制器级别指定我的布局,这是正确的吗?

如果是这样,应该如何给出我的静态页面布局?我看到的唯一解决方法是为每个页面创建一堆空控制器,其唯一目的是指定一个公共布局文件,但这有点像过度杀伤。

我错过了一招吗?

感谢您的帮助

3 个答案:

答案 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

来自https://github.com/thoughtbot/high_voltage#override

答案 2 :(得分:0)

根据GoodEnough的评论,您可以使用像high_voltage

这样的宝石

默认使用“应用程序”布局,但您可以通过以下两种方式之一更改此选项:

全局布局

HighVoltage.layout = 'foobar' - 如果所有静态页面都具有相同的布局

改变布局

创建自己的PagesController:

class PagesController < HighVoltage::PagesController
  layout 'foobar'

请参阅docs覆盖部分以获取完整信息。