有没有办法从视图中找出当前控制器是什么?
举个例子,为什么我想知道这一点:如果几个控制器共享相同的布局,我可能在布局ERB文件中有一部分,我想根据控制器突出显示当前页面的菜单项。
也许这是一个糟糕的方法。如果是的话,什么是更可取的方法?
不过,我想知道如何以任何一种方式获取当前控制器的名称。
(显然,我可以在每个控制器中放入@controller_name = 'users'之类的东西;但这似乎是Rails在幕后已经完成的事情。所以我想知道是否有内置的方法。)
有没有办法从视图中找出当前控制器是什么?
举个例子,为什么我想知道这一点:如果几个控制器共享相同的布局,我可能在布局ERB文件中有一部分,我想根据控制器突出显示当前页面的菜单项。
也许这是一个糟糕的方法。如果是的话,什么是更可取的方法?
不过,我想知道如何以任何一种方式获取当前控制器的名称。
(显然,我可以在每个控制器中放入@controller_name = 'users'之类的东西;但这似乎是Rails在幕后已经完成的事情。所以我想知道是否有内置的方法。)
使用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;
}