Rails部分渲染

时间:2011-03-08 13:45:35

标签: ruby-on-rails

根据当前控制器渲染局部的最佳方法是什么?
例如,我们有这个部分:
<h2>Funny <em>title</em></h2> 根据控制器,我想将<em>更改为<strong>
我们可以通过将locals传递给partial并使用conditional来实现这一点:
<% if :controller == "something" tag="em" elsif :controller == "other" tag="strong" %>
<h2>Funny <<%= tag %>>title</<%= tag %>></h2>

但如果有n个控制器怎么办?视野中的这些条件看起来不太好。

2 个答案:

答案 0 :(得分:1)

我只需在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 %>

答案 1 :(得分:0)

一种选择是不使用服务器端逻辑,而是使用CSS。

而不是:

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

您可以使用基于控制器名称的动态CSS类名称将标题包装在span标记和样式中:

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

将控制器名称作为名为“title_class”的局部变量传递给partial,并使用CSS选择器变体来匹配样式表中的这些名称。