Представьте себе упрощенный блог, где у нас есть контроллер с именем PostsController, который имеет два действия: index и show
Действие index вызывается, когда пользователь нажимает http://yourwebsite.com/posts - это действие отображает все доступные сообщения в блоге.
Действие show вызывается, когда пользователь получает определенную статью в блоге, т.е. http://yourwebsite.com/posts/article-about-something-interesting
Допустим, мы хотим, чтобы страница индекса имела макет из двух столбцов, и мы хотим, чтобы страница показа для каждой статьи блога имела макет из трех столбцов. Чтобы достичь этого, мы просто определили бы два отдельных макета (в папке app / views / layouts) - мы назовем макет из двух столбцов «приложением» и назовем макет из трех столбцов «альтернативным».
Чтобы страница индекса использовала макет из двух столбцов, а страница показа для использования макета из трех столбцов, мы могли бы просто сделать следующее в нашем контроллере:
class PostsController < ApplicationController
def index
@posts = Post.all
render :layout => "application"
end
def show
@post = Post.find(params[:id])
render :layout => "alternate"
end
end
Если мы хотим, чтобы все действия использовали один и тот же макет, мы можем просто сделать это:
class PostsController < ApplicationController
layout "application"
def index
@posts = Post.all
end
def show
@post = Post.find(params[:id])
end
end
Наконец, если мы не укажем, какой макет мы хотим использовать, то Rails по умолчанию отобразит любой макет с тем же именем, что и ресурс, который мы отображаем. Таким образом, в нашем примере, где наши ресурсы называются «Posts», если мы определим третий макет с именем posts.html.erb (в app / views / layouts), тогда Rails автоматически использует этот макет, когда пользователь выполняет какие-либо действия в PostsController - при условии, конечно, что мы явно не просили Rails визуализировать другой макет ....
Надеюсь, это поможет,