我有一个导航栏,它是一个以标签作为列表元素的无序列表。我正在使用视图助手绘制每个单独的选项卡(列表项)。我想active
根据视图提供的值将类应用于每个类。这可能吗?
详细地说,在视图助手上,我可能有类似的东西:
def tab_item(tab)
content_tag :li, :class => ('active' if some_variable == tab) do
link_to tab, "/#{tab}"
end
end
在特定的视图中,我会这样做:
<% somehow_set_some_variable('dash') %>
然后,这将使它some_variable
在视图助手中是'dash'
,使该选项卡获得'active'
类。
这有可能吗?如果没有,是否有另一种方法来解决这个问题?我应该在控制器上设置一个变量吗?
我已经看到基于当前控制器和/或操作的决定的文章和问题,但这太严格了,所以我想看看我是否可以采用这种方法。我想出的另一种解决方案是在一个视图助手中生成整个选项卡列表,该助手需要一个参数来激活选项卡,我在每个视图中都调用它。但是,我宁愿在布局中生成列表并在每个视图的基础上激活一个选项卡。
解决方法:到目前为止,我已经提出了一个折衷方案,但不知道如何做我在这个问题中提出的问题。如果传递给应用程序助手的参数与实例变量匹配,应用程序助手创建一个li
标签并应用。activate
@activate
def nav_tab(tab)
content_tag :li, :id => tab, :class => ('active' if tab == @activate) do
link_to tab, "/#{tab}"
end
end
然后在控制器操作中,我只需设置该变量,例如:
def index
# ...
@activate = 'dash'
end
这有效,并且具有我正在寻找的效果:导航栏是独立生成的,然后每个“操作”都可以指定要激活的选项卡,如果他们愿意的话。
我不确定这是否是解决此问题的最佳方法。我试图将这些东西保留在视图中,例如这个问题<title>
,它可以针对特定于视图的更改完成此操作。