2015-05-07 7 views
3

У меня есть контроллер под названием «Страницы» с примерно 5 страницами (представлениями), для которых я отобразил макет под названием «page.html.erb». Так что мой «Страница» Контроллер имеет:Rails - Как использовать application.html.erb в моем настраиваемом макете?

class PagesController < ApplicationController 
layout 'page' 

Я хочу, чтобы моя «page.html.erb» раскладка использовать «application.html.erb» по умолчанию. Как я могу сделать свой собственный макет «page.html.erb» автоматически, чтобы унаследовал/отобразил в нем «application.html.erb»?

ответ

2

Если вы не указали макет в своем контроллере, Rails по умолчанию будет отображать ваш макет application. Если вы следуете этому соглашению, вы можете использовать application.html.erb для своей общей структуры страницы сайта (также хорошее место для включения таблиц стилей и javascript). Затем вы можете использовать = yield в своем макете, чтобы указать, где должны отображаться представления контроллера.

Действия контроллера по умолчанию будут отображать их соответствующие представления. Например, если у вас есть действие foo в контроллере bars_controller.rb, Rails отобразит /app/views/bars/foo.html.erb, если вы не перенаправите или не определите другой вид рендеринга в действии. Фактически, если все, что вы хотите сделать в действии foo, отображает страницу, вам даже не нужно определять действие в вашем контроллере!

Конвенция о конфигурации мой друг.

+0

application.html.erb сделан по умолчанию. Я отобразил отдельный макет под названием «Страницы», который имеет только строку меню. Все остальные данные фона и заголовка находятся в макете «приложение». Я хочу найти способ объединить макеты «приложение» и «страница». Наверное, это невозможно. – Supritha

+0

Правда, вам нужно начать с базовой компоновки (или без макета) для каждого действия и вида контроллера. Для вашего случая я бы рекомендовал визуализировать макет страницы в шаблоне приложения условно. Итак, где бы вы не захотели, чтобы макет страниц отображался: '<% = рендеринг макетов/страниц ', если params [: controller] ==' pages '%>'. Это будет включать только макет страниц в макете приложения для контроллера Pages. –

+0

Да, я применил аналогичный метод. Помимо моего макета «приложение», я передал остальную часть данных страницы как частичную, и она отображается очень хорошо. – Supritha

3

Я обычно разделяю макет на более мелкие частицы (заголовок, нижний колонтитул, HTML HEAD и т. Д.). Таким образом, я могу использовать несколько макетов, смешивая разные частичные части.

+0

Кажется, мы не сможем объединить 2 макета вместе. Лучший способ, как вы сказали, - сделать разные частичные. Благодарю. – Supritha

+0

Можете ли вы принять мой ответ? :) –

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