如何在Rails中获取URL的当前控制器?

3
我正在使用以下代码来使用Twitter Bootstrap高亮显示当前活动的菜单选项卡:
  def nav_link_to(link_text, link_path, options = nil)
    class_name = current_page?(link_path) ? 'active' : ''

    content_tag(:li, :class => class_name) do
      link_to link_text, link_path, options
    end
  end

当然,这会使得链接仅在给定的链接是当前页面时才活跃。如何更改此功能,以便在当前控制器下方的任何链接处都返回“active”?换句话说,对于所有帖子控制器的操作,链接都将是活动的。
4个回答

16
你可以使用controller_name获取当前控制器的名称。

是的,但问题是 - 我如何检查链接或URL是否属于某个控制器 - 这就是代码所涉及的内容。 - valk
你不需要。但是你可以手动使用它: link_to 'posts', posts_path, :class => params[:controller] == 'posts' ? 'active' : '' - rfunduk
7
指南建议使用 controller_name 而不是 params[:controller] - jdoe
使用 controller_name 和/或 action_name 是解决这个问题的常规方式。 - systho
@rfunduk,我会接受你的答案,但我想知道,也许有人知道以“Rails”的方式干净地实现这一点。 - valk
显示剩余5条评论

7
这个可以通过以下方法解决:
Rails.application.routes.recognize_path(link_path)[:controller]

5

params[:controller] 返回带有命名空间的控制器名称。

如果你只想得到控制器名称,应该使用 controller.controller_name

class Admin::Posts; end

# from the view
params[:controller] 
=> 'admin/posts'

controller.controller_name
=> 'posts'

0

我不确定我是否正确地理解了这个问题,但是你不应该使用get参数来查看当前控制器。

你尝试过使用request.path吗?换句话说,检查下面的任何链接是否包含'request.path'在它们的路径中...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接