Представьте упрощенный блог, в котором у нас есть контроллер 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.html.erb (в app/views/layouts), то Rails будет автоматически использовать этот макет, когда пользователь выполняет любое из действий в PostsController - при условии, конечно, что мы явно не просили Rails отобразить другой макет....
Надеюсь, поможет,
person
stephenmurdoch
schedule
04.07.2010