2014-12-09 2 views
1

Кто может помочь мне в моих сомнениях относительно Ruby on Rails. Предположим, у меня есть 3 страницы (т. Е. Дома, о, свяжитесь с нами), которые я хочу создать. Каждая страница должна иметь разные шаблоны Как мы знаем в ROR, у нас есть один «application.html.erb» внутри каталога макета.Как создать различные макеты в Rails

Я следующий код в application.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Demo Oditek</title> 
    <%= stylesheet_link_tag 'application', media: 'all', 
              'data-turbolinks-track' => true %> 
    <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 
    <%= csrf_meta_tags %> 
    <!--[if lt IE 9]> 
     <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/r29/html5.min.js"> 
     </script> 
    <![endif]--> 
    </head> 
    <body> 
    <header class="navbar navbar-fixed-top navbar-inverse"> 
     <div class="container"> 
     <%= link_to "sample app", '#', id: "logo" %> 
     <nav> 
      <ul class="nav navbar-nav pull-right"> 
      <li><%= link_to "Home", '#' %></li> 
      <li><%= link_to "Help", '#' %></li> 
      <li><%= link_to "Log in", '#' %></li> 
      </ul> 
     </nav> 
     </div> 
    </header> 
    <div class="container"> 
     <%= yield %> 
    </div> 
    </body> 
</html>` 

Тег <%= yield %> оказывает все страницы внутри <div class="container"></div> Но мне нужен другой другой шаблон для о и связаться с нами pages.How я могу создать these.Please предоставить мне какая-то идея или ссылка.

ответ

2

В контроллере:

def about 
    @my_model = MyModel.where('whatever') 
    render layout: 'about' 
end 

Затем в макеты создать файл с именем about.html.erb

6

Вы можете добавить больше макетов в папку просмотров/макеты. Теперь у вас есть только views/layouts/application.html.erb.

Вы можете добавить views/layouts/home.html.erb или views/layouts/dashboard.html.erb.

Чтобы выбрать, какой макет использовать, вы можете определить его в контроллере, для всех действий или просто переопределить макет для определенного вида.

class SomeController < ApplicationController 

    # all other actions will have application layout 
    layout 'dashboard', :only => [:action_1, :action_2] 

end 
+2

Одно замечание - когда вы начинаете использовать альтернативные макеты, вы, вероятно, хотите, чтобы сделать много каждый макет такой же, как и в application.html.erb (например, содержимое 'head'). Поместите эти разделяемые разделы в частичные, которые каждый шаблон может ссылаться, так что файл шаблона в основном имеет только html, который является уникальным для этого шаблона: в основном, Do not Repeat Yourself. –

Смежные вопросы