有没有办法在视图中找出当前控制器的内容?
为什么我想知道这个的例子:如果几个控制器共享相同的布局,我可能在布局ERB文件中有一个部分,我想根据控制器突出显示当前页面的菜单项。
也许这是一个糟糕的方法。如果是这样,那么更优选的方法是什么?
我很想知道如何获得当前控制器的名称。
(显然我可以在每个控制器中添加类似@controller_name = 'users'
的东西;但这似乎就像Rails在幕后已经完成的那样。所以我只是想知道是否有内置的方式。)
答案 0 :(得分:251)
此外,在Rails指南中,它说:
params散列将始终包含:controller和:action键,但您应该使用 controller_name 和 action_name 方法来访问这些值
所以假设你有一个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) %>
答案 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;
}