Частичное рендеринг рельсов - PullRequest
0 голосов
/ 08 марта 2011

Каков наилучший способ визуализации частичного в зависимости от текущего контроллера?
Например, у нас есть это частичное:
<h2>Funny <em>title</em></h2> И в зависимости от контроллера я хотел бы изменить <em> на <strong>
Мы можем сделать это, передавая локальные данные частичным и используя условные:
<% if :controller == "something" tag="em" elsif :controller == "other" tag="strong" %><br> <h2>Funny <<%= tag %>>title</<%= tag %>></h2>
Но что, если есть n контроллеров? Это количество условий выглядит не очень хорошо.

Ответы [ 2 ]

1 голос
/ 08 марта 2011

Я бы просто установил переменную экземпляра в before_filter, а затем взял бы ее в частичном.

Например, в вашем контроллере:

class FooController ...
  before_filter set_subtitle_flag

  ...

  private

  def set_subtitle_flag
    @subtitle_strong = true
  end
end

Тогда в вашем частичном:

<% if @subtitle_strong %>
  <strong>Foo bar baz</strong>
<% else %>
  <em>Foo bar baz</em>
<% end %>
0 голосов
/ 08 марта 2011

Один из вариантов - не использовать серверную логику, а использовать CSS.

Вместо:

<h2>Funny <em>title</em></h2>

Вы можете заключить заголовок в тег span и стиль, который сдинамическое имя класса CSS, основанное на имени вашего контроллера:

<h2>Funny <span class="<%= title_class %>">title</span></h2>

Передайте имя контроллера в партиал как локальную переменную с именем 'title_class' и используйте варианты селектора CSS для соответствия этим именам в вашей таблице стилей.

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