根据当前控制器渲染局部的最佳方法是什么?
例如,我们有这个部分:
<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个控制器怎么办?视野中的这些条件看起来不太好。
答案 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选择器变体来匹配样式表中的这些名称。