我可以在视图中获取当前控制器的名称吗?

Dan*_*Tao 202 model-view-controller controller ruby-on-rails view

有没有办法在视图中找出当前控制器的内容?

举例说明为什么我想知道这个:如果几个控制器共享相同的布局,我可能在布局ERB文件中有一个部分,我想根据控制器突出显示当前页面的菜单项.

也许这是一个糟糕的方法.如果是这样,更优选的方法是什么?

不过,我很想知道如何获得当前控制器的名称.

(显然我可以@controller_name = 'users'在每个控制器中放置类似的东西;但这似乎是Rails在幕后已经完成的事情.所以我只是想知道是否有内置方式.)

Mus*_*ili 260

此外,在Rails指南中,它说:

params散列将始终包含:controller和:action键,但您应该使用方法controller_nameaction_name来访问这些值

ActionController参数

因此,假设您有一个CSS类active,应该插入其页面当前打开的任何链接中(可能使您的样式可以不同).如果您有一个static_pages带有about操作的控制器,则可以在视图中突出显示如此链接:

<li>
  <a class='button <% if controller.controller_name == "static_pages" && controller.action_name == "about" %>active<%end%>' href="/about">
      About Us
  </a>
</li>
Run Code Online (Sandbox Code Playgroud)

  • 如果你的控制器在这样的命名空间后面:`Admin :: Orders`然后`controller_name`和`params [:controller]`分别是``orders``和``admin/orders``. (21认同)
  • 我只是尝试使用它,`Admin :: UsersController`在Rails 4.1.0中实际上有一个`controller_name`的`users`和一个`controller_path`的`admin/users`. (8认同)

Anu*_*haw 237

controller_name 保存用于提供当前视图的控制器的名称.

  • 实际上在视图中使用`params`是不好的做法.请改用`controller_name` (93认同)

Tha*_* kp 88

#to get controller name:
<%= controller.controller_name %>
#=> 'users'

#to get action name, it is the method:
<%= controller.action_name %>
#=> 'show'


#to get id information:
<%= ActionController::Routing::Routes.recognize_path(request.url)[:id] %>
#=> '23'

# or display nicely
<%= debug Rails.application.routes.recognize_path(request.url) %>
Run Code Online (Sandbox Code Playgroud)

参考


Ric*_*cia 5

controller_path保存用于为当前视图提供服务的控制器的路径。(即:)admin/settings

controller_name保存用于服务当前视图的控制器的名称。(即:)settings