Я сделал подобное, но использовал только 1 уровень подуровней.Может быть легко настроен на несколько уровней.
In controllers / application_controller.rb:
def sub_layout
nil
end
В контроллере (например, blog_controller.rb):
def sub_layout
"blog"
end
В layouts / application.html.erb вместо <%=yield%>
:
<%= controller.sub_layout ? (render :partial => "/layouts/#{controller.sub_layout}") : yield %>
Создайте частичный layouts/_blog.html.erb
:
...code
<%=yield%>
...code
Повторите для других контроллеров и вспомогательных макетов.
РЕДАКТИРОВАТЬ: Если вам нужно сделать это для каждого действия:
def sub_layout
{
'index' => 'blog',
'new' => 'other_sub_layout',
'edit' => 'asdf'
}[action_name]
end