У меня есть серия контроллеров и связанных представлений в моем приложении, которые существуют внутри пространства имен Admin
. Я хочу, чтобы эти представления использовали другой макет, чем те, что были в основном пространстве имен, поэтому я могу дать им другой внешний вид на обычном сайте. Есть ли способ, которым я могу это сделать, используя встроенные функции Rails? Я знаю, что если у меня есть класс PostController
и создайте представление posts.html.erb
в каталоге макетов, это будет использоваться в качестве макета для любого из представлений контроллера, есть ли что-то подобное для диспетчеров с именами?
Предоставление макета по умолчанию для представлений в пространстве имен
Ответ 1
Создайте собственный класс AdminController для ваших контроллеров администрирования, которые вы собираетесь наследовать. Этот AdminController наследует от ApplicationController и переопределяет макет.
class AdminController < ApplicationController
layout "admin"
end
class Admin::PostController < AdminController
end
Ответ 2
Нет необходимости в методе layout
. Вы должны поместить ваши файлы макета для пространства имен в views/layouts/<namespace>
.
Пример пространства имен с именем 'foo
':
Контроллер: app/controllers/foo/bar_controller.rb
Макет для этого контроллера: app/views/layouts/foo/bar.html.erb
Ответ 3
Я верю, что вы получите точный ответ на свой вопрос в этом прекрасном скринкасте Райана Бейтса.
http://railscasts.com/episodes/269-template-inheritance
(т.е. если вы используете Rails 3.1)
Ответ 4
Вы можете переопределить макет по умолчанию для любого контроллера с помощью layout method