Ответ 1
Вообще говоря, Rails будет использовать макет приложения, если нет макета, соответствующего контроллеру. Например, если у вас есть PeopleController, Rails будет искать layouts/people.html.erb, и если он не обнаружит этого, application.html.erb.
Вы можете явно указать конкретный макет, если вы хотите переопределить это соглашение.
class Admin::PeopleController
layout 'some_layout'
end
Этот контроллер затем будет использовать some_layout.html.erb вместо поиска people.html.erb и application.html.erb.
Но это может быть лучшим способом, если вы хотите сгруппировать вещи: Если у вас есть базовый AdminController, который наследуется от ApplicationController, вы можете наследовать, скажем, Admin:: PersonController AdminController, и он наследует макет администратора.
Я не знаю специфики вашего кода, но вы можете:
class AdminController
def show
#render a template linking to all the admin stuff
end
end
app/controllers/admin/people_controller.rb:
class Admin::PeopleController < AdminController
#your awesome restful actions in here!
end
views/layouts/admin.html.erb:
Hello from the Admin!
<%= yield %>
Единственное, что нужно понять, это то, что Admin:: PeopleController наследует любые действия, которые определил AdminController (так же, как все, что определено в ApplicationController, становится доступным во всех подклассах). Это обычно не проблема, так как вы, вероятно, будете переписывать методы в любом случае, но просто для того, чтобы быть в курсе. Если у вас нет AdminController, вы можете сделать его без действий только для целей макета.