Rails определяют макет для статических страниц - PullRequest
1 голос
/ 12 января 2012

В моем приложении статический контент:

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

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

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

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

Мне не хватает трюка?

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

Ответы [ 3 ]

3 голосов
/ 12 января 2012

Да, установите макет на уровне контроллера.Вы можете создать контроллер для этой группы страниц следующим образом:

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

Youтакже может передавать false, если вам вообще не нужен макет, например, для robots.txt.

2 голосов
/ 07 апреля 2015

Если вы хотите установить один макет (например, без макета) для всех ваших статических страниц, создайте файл 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

0 голосов
/ 12 января 2012

Согласно комментарию GoodEnough, вы можете использовать гем типа high_voltage

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

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

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

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

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

class PagesController < HighVoltage::PagesController
  layout 'foobar'

Полный раздел приведен в разделе Переопределение в документах .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...