Asp.net MasterPage эквивалент в Ruby on Rails, пытаясь определить макет сайта - PullRequest
1 голос
/ 05 июля 2010

Asp.net WebForms и MVC имеют концепцию Masterpages, которая позволяет легко определить одноразовый макет для всей страницы вашего сайта. В Rails я изо всех сил пытаюсь найти эквивалентный шаблон использования или функцию.

Из того, что я прочитал, очень легко определить макет в каждом действии с помощью:

layout: 'viewname'

Теперь это казалось довольно церемониальным, чтобы включить в каждый контроллер, поэтому я добавил:

layout: 'application'

в базовом ApplicationController.

Пока это работает нормально, если у меня нет более определенного макета на страницах просмотра. Является ли это распространенным методом получения согласованного стиля в вашем приложении Rails?

Ответы [ 2 ]

2 голосов
/ 05 июля 2010

Представьте себе упрощенный блог, где у нас есть контроллер с именем 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 визуализировать другой макет ....

Надеюсь, это поможет,

1 голос
/ 05 июля 2010

Этот PDF-отрывок из книги Rails для разработчиков .Net содержит довольно хорошее объяснение макетов Rails, а также сравнение с ASP.Net MasterPages. Поскольку он, кажется, работает довольно хорошо, он, вероятно, используется довольно часто, по крайней мере, разработчиками, знакомыми с концепцией главной страницы.

...