让'active_link_to'与Pagination一起正常工作

时间:2014-02-03 19:52:33

标签: css ruby-on-rails twitter-bootstrap ruby-on-rails-3.2

当我使用active_link_to时,我想让pagination正常工作。我有3个nav-tabs并且它们在选中时都可以正常工作,但是,当我点击我的分页按钮查看更多记录时,我当前的nav-tab会丢失它的活动状态(样式)。我需要采取哪些步骤来解决此问题?

如果有人不介意,还有一个小问题。我正在使用log-in屏幕让我进入主要布局。当我登录时,nav-tabs都不是active。我该如何渲染?如果我单击其中一个它显示活动但我希望第一个选项卡默认显示为活动状态。我再次使用active_link_to

谢谢。

TW

以下是我使用代码更新的帖子:

在我的Gemfile中我有

gem kaminari gem active_link_to

在我的projects_controller.rb

@projects = Kaminari.paginate_array(@projects).page(params[:page]).per(10)

在我的index.html.erb

在我的页面末尾

</table>

</div>

<%= paginate @projects %>

在我的projects_helper.rb

def active_link_to(text, link)
    content_tag(:li, :class => request.fullpath == link ? 'active' :nil) do 
      link_to text, link
    end 
end

在我的布局application.html.erb

<ul class="nav nav-tabs">
   <li><%= active_link_to("Active Projects", projects_path) %></li>
   ....
   ....
</ul>

1 个答案:

答案 0 :(得分:0)

问题是您尝试将link完全与fullpath匹配,而您的fullpath有时会包含一个查询字符串,如果您拒绝该字符串将会破坏fullpath == link还要在link中包含查询字符串。

一种可能的解决方案是匹配fullpath的子字符串,如下所示:

def active_link_to(text, link)
    content_tag(:li, :class => request.fullpath.starts_with?(link) ? 'active' :nil) do 
      link_to text, link
    end 
end

甚至使用Ruby String的[]方法询问字符串中是否存在子字符串:

def active_link_to(text, link)
    content_tag(:li, :class => request.fullpath[link].present? ? 'active' :nil) do 
      link_to text, link
    end 
end

您还可以尝试使用提供所需方法的Gem:https://github.com/comfy/active_link_to

它使用更全面的路径匹配方法。