2012-01-12 48 views
1

我的應用程序有一些靜態內容:的Rails指定佈局的靜態頁面

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

我想這些頁面共享一個佈局,而不是複製每個文件中的頁眉/頁腳。

圍繞我找到的佈局的唯一文檔似乎表明我應該在控制器級別指定我的佈局,這是否正確?

如果是這樣,應該如何給我的靜態頁面佈局?我看到的唯一解決方法是爲每個頁面創建一堆空的控制器,僅用於指定一個常見的佈局文件,但這種味道太過矯枉過正。

我錯過了一個招數?

感謝所有幫助

+1

你可以使用一個靜態控制器。 – mbillard 2012-01-12 14:34:11

+0

是的,只是注意到rails已經生成了一個頁面控制器,我可以使用它! Brainfart就我而言。 – Chris 2012-01-12 14:36:50

回答

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 

您還可以通過虛假的,如果你不希望所有的佈局,比如robots.txt。

0

每GOODENOUGH的評論,你可以使用寶石像high_voltage

默認使用的「應用程序」的佈局,但您可以通過以下兩種方式之一更改此:

一個佈局全球

HighVoltage.layout = 'foobar' - 如果所有的靜態網頁具有相同的佈局

個變佈局

創建您自己的PagesController:

class PagesController < HighVoltage::PagesController 
    layout 'foobar' 

docs覆蓋部分爲全舀。

1

如果你想爲你的所有靜態頁面一種佈局(如沒有佈局)創建一個文件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