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

val*_*alk 3 url ruby-on-rails twitter-bootstrap

我正在使用此代码通过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
Run Code Online (Sandbox Code Playgroud)

这当然使链接处于活动状态,仅当给定链接是当前页面时.如何更改此功能,以便为当前控制器下方的任何链接返回"活动"?换句话说,对于Posts控制器的所有操作,链接都是活动的?

rfu*_*duk 15

您可以使用controller_name获取当前控制器的名称.

  • 指南建议使用`controller_name`而不是`params [:controller]`. (7认同)

wha*_*hat 6

这可以通过以下方式解决:

Rails.application.routes.recognize_path(link_path)[:controller]


fre*_*oid 5

params[:controller]返回控制器名称及其命名空间。

如果您只想获取控制器名称,则应该使用controller.controller_name.

class Admin::Posts; end

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

controller.controller_name
=> 'posts'
Run Code Online (Sandbox Code Playgroud)