2012-01-12 2 views
1

Мое приложение имеет некоторый статический контент:Rails указать расположение для статических страниц

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

Я хочу, чтобы эти страницы, чтобы разделить макет, а не дублировать заголовок/колонтитул в каждом файле.

Единственная документация вокруг макетов, которую я нашел, по-видимому, указывает, что я должен указать свои макеты на уровне контроллера, это правильно?

Если да, то каким образом следует использовать мои статические макеты страниц? Единственным обходным решением, которое я вижу, является создание пустых пустых контроллеров для каждой страницы с единственной целью указания общего файла макета, но это пахнет излишним.

Я пропустил трюк?

Спасибо за любую помощь

комментарий
+1

Вы можете использовать один статический контроллер. – mbillard

+0

Да, только что заметил, что рельсы уже создали контроллер страниц, который я могу использовать для этого! Мозг с моей стороны. – Chris

ответ

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

Если вам необходимо изменить макет для конкретного действия, вы можете использовать :layout опцию render метода,:

def something_special 
    render :layout => "other" 
end 

Вы также можете передать ложь, если вы не хотите макет вообще, как для robots.txt.

0

Per Гудэнафа, вы могли бы использовать драгоценный камень, как high_voltage

По умолчанию этого значения с помощью «приложения» макета, но вы можете изменить это в одном из двух способов:

Один макет глобально

HighVoltage.layout = 'foobar' - если все ваши статические страницы имеют один и тот же макет

Различные макеты

Создать PagesController свой собственный:

class PagesController < HighVoltage::PagesController 
    layout 'foobar' 

См Override раздел 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

Смежные вопросы