我可以执行request.path_parameters ['controller']和request.path_parameters ['action'],但是有什么像request.path_parameters ['template'],所以我可以辨别哪个模板文件(例如index.html) .erb)正在呈现?
我正在编写一个方法,自动将body ID设置为正在渲染的模板,以便于css操作:
class ApplicationController < ActionController::Base
...
after_filter :define_body_selector
...
def define_body_selector
# sets @body_id to the name of the template that will be rendered
# ie. if users/index.html.erb was just rendered, @body_id gets set to "index"
@body_id = ???
end
...
答案 0 :(得分:0)
@body_id = params[:action]
答案 1 :(得分:0)
如果您有不同的模板文件,可以在其中使用content_for
(请查看guide about layouts and templates)在布局文件中设置ID,或者只是坚持params[:action]
(这应该足够了 - - 模板的选择基于所谓的动作。
您可以使用
对所有(或非全部)操作进行通用before_filter
before_filter :set_id_for_body, :only => [...]
def set_id_for_body
@body_id = params[:action]
end
始终考虑如何保持代码干净!
修改强>
您可以定义将操作与匹配模板链接的哈希:
ActionClasses = {
:update => "show",
:show => "show,
:new => "new",
:edit => "new",
...
}
在您的布局文件中添加
<body id="<%= ActionClasses[params[:action]] %>">
修改强>
可以通过ActionBase::template
方法访问模板,但它不会按照您希望的方式工作。如果您在布局文件中调用filename
或name
方法,您将获得布局文件的路径,而不是模板。 AFAIK无法检查正在渲染的模板,因为可以使用多个模板来渲染单个动作。