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

时间:2010-09-21 05:19:48

标签: ruby-on-rails model-view-controller view controller

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

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

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

我很想知道如何获得当前控制器的名称。

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

5 个答案:

答案 0 :(得分:251)

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

  

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

ActionController Parameters

所以假设你有一个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>

答案 1 :(得分:223)

controller_name包含用于为当前视图提供服务的控制器的名称。

答案 2 :(得分:86)

#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) %>

reference

答案 3 :(得分:2)

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

controller_name包含用于提供当前视图的控制器的名称。 (即:settings)。

答案 4 :(得分:1)

如果要在应用程序中使用所有样式表,只需在application.html.erb中添加此行。将其插入<head>标签内

  <%= stylesheet_link_tag  controller.controller_name , media: 'all', 'data-turbolinks-track': 'reload' %>

此外,要在不同的控制器上指定相同的类CSS
将此行添加到application.html.erb的body

  <body class="<%= controller.controller_name %>-<%= controller.action_name %>">

因此,例如,现在我想更改“ home”控制器和“ index”操作中的p标签。 在index.scss文件内部添加。

.nameOfController-nameOfAction <tag> { }

 .home-index p {
        color:red !important;
      }
相关问题