有没有办法从视图中找出当前控制器是什么?

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

也许这是一个糟糕的方法。如果是的话,什么是更可取的方法?

不过,我想知道如何以任何一种方式获取当前控制器的名称。

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


Controller_name包含用于服务当前视图的控制器的名称。


使用controller.controller_name

在Rails指南中,它说:

params散列总是包含:controller和:action键,但是你应该使用方法controller_name和action_name来访问这些值

ActionController参数

所以让我们说你有一个CSS类活动,它应该被插入到任何链接,其页面当前打开(也许这样你可以不同的风格)。如果你有一个带有about动作的static_pages控制器,你可以在视图中像这样高亮显示链接:

<li>
  <a class='button <% if controller.controller_name == "static_pages" && controller.action_name == "about" %>active<%end%>' href="/about">
      About Us
  </a>
</li>

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

参考


Controller_path保存用于服务于当前视图的控制器的路径。(即:管理/设置)。

and

Controller_name包含用于服务当前视图的控制器的名称。(即:设置)。


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

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

同样,在不同的控制器上指定相同的类CSS 在application.html.erb的主体中添加这一行

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

例如,现在我想改变'home'控制器和'index'动作中的p标签。 在索引。添加SCSS文件。

.nameOfController-nameOfAction <tag> { }

 .home-index p {
        color:red !important;
      }