根据Rails中的当前控制器和当前对象ID选择活动选项卡

时间:2014-06-07 06:02:35

标签: ruby-on-rails ruby tabs

在我的Rails 3.2应用程序中,我想根据正在查看的当前集合为列表元素分配一个活动类。

在我的助手方法中,我有类似下面的内容

def active_nav_tab(classname)
    if controller.class == classname && controller.action_name == 'show'
       "class=active"
    end
end

它将控制器级别的正确类分配给顶部导航栏中包含的所有类别。如何修改辅助方法,使其仅选择当前集合为活动状态。

在我的视图层中

<% collections = Collection.all %>
        <% collections.each do |collection| %>
        <li <%= active_nav_tab(CollectionsController) %>>
          <%= link_to colection.name, collection %>
        </li>
<% end %>

1 个答案:

答案 0 :(得分:2)

尝试修改辅助方法

def active_nav_tab(classname)
    if params[:controller] == classname && params[:action] == 'show'
       "class=active"
    end
end

在视图中:

    <li <%= active_nav_tab(CollectionsController) %>>

<强>更新
假设您单击列表中的 news 集合选项卡。这会采取show操作,您可以执行以下操作:

@collection = Collection.find_by_name('news')

现在,在您的视图中,您只想将此集合显示为活动标签。你可以这样做:

//在选项卡列表的迭代中:

<% collections = Collection.all %>
        <% collections.each do |collection| %>
        <li <%= "class='active'" if collection.eql?(@collection)  %>>
          <%= link_to collection.name, collection %>
        </li>
<% end %>

在此次迭代中,当&#39; news&#39;遇到集合,它将与@collection相同,并且会添加active类。

<li <%= "class='active'" if collection.eql?(@collection)  %>>

希望这会有所帮助:)