Запутался в раскладке Advanced Rails Layout - PullRequest
1 голос
/ 17 ноября 2010

В настоящее время у меня есть несколько макетов, которые использует мое приложение (... одинаково для всех макетов):

# application.html.erb
...
<div id="section"><div class="wrapper"><%= yield %></div></div>
...

# wide.html.erb
...
<div id="section" class="wide"><div class="container-12"><%= yield %></div></div>
...

# thin.html.erb
...
<div id="section" class="thin"><div class="container-06"><%= yield %></div></div>
...

Я пытаюсь повторно кодировать код, чтобы уменьшить дублирование, однако странное размещение переменных класса (вне выхода) затрудняет. Должен ли я использовать переменные для объявления значений класса в моем макете (и перейти к одному макету) или я должен добавить макет container.html.erb, который содержит дубликат ..., а затем визуализировать три других макета из него (или сделать еще одну третью) есть вариант что мне не хватает)? Я ищу "Rails" способ сделать это, если это возможно. Спасибо!

Ответы [ 2 ]

3 голосов
/ 18 ноября 2010
module ApplicationHelper
  def section_helper(outer_class=nil,inner_class)
    content_tag(:div, :class=> outer_class, :id => :section) do
      content_tag(:div, :class=> inner_class) do
        yield
      end
    end
  end
end

и в макетах:

<%= section_helper("wrapper") { yield } %>
<%= section_helper("wide","container-12") { yield } %>
<%= section_helper("thin","container-06") { yield } %>

Это хорошо работает для первого случая, когда нет «внешнего» класса, так как :class => nil ничего не рендерит. Но вы также можете передать хеш, если необязательный первый аргумент сбивает с толку.

0 голосов
/ 17 ноября 2010

Мы сделали что-то подобное, используя переменную экземпляра, такую ​​как @sectionclass. Затем мы устанавливаем значение по умолчанию в ApplicationController и переворачиваем его на значения, специфичные для страницы в других контроллерах. Тогда ваша страница будет выглядеть примерно так:

<div id="section" class="<%= @sectionclass %>"><div class="container-12"><%= yield %></div></div>

Приятной частью переменной экземпляра является то, что нулевой регистр завершается неудачно с пустой строкой. (Хотя некоторые могут сказать, что это «плохо»).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...