是否可以从布局中获取当前渲染视图的名称?
答案 0 :(得分:4)
我为css命名空间做了类似的事情:
# config/initializers/action_view.rb
ActionView::TemplateRenderer.class_eval do
def render_template_with_tracking(template, layout_name = nil, locals = {})
# with this gsub, we convert a file path /folder1/folder2/subfolder/filename.html.erb to subfolder-filename
@view.instance_variable_set(:@_rendered_template, template.inspect.gsub(/(\..*)/, '').split('/')[-2..-1].join('-'))
out = render_template_without_tracking(template, layout_name, locals)
@view.instance_variable_set(:@_rendered_template, nil)
return out
end
alias_method_chain :render_template, :tracking
end
# application.html.erb
<body class="<%= :@_rendered_template %>" >
答案 1 :(得分:3)
方法active_template_virtual_path方法以下列形式“controller / action”返回模板作为名称
class ActionController::Base
attr_accessor :active_template
def active_template_virtual_path
self.active_template.virtual_path if self.active_template
end
end
class ActionView::TemplateRenderer
alias_method :_render_template_original, :render_template
def render_template(template, layout_name = nil, locals = {})
@view.controller.active_template = template if @view.controller
result = _render_template_original( template, layout_name, locals)
@view.controller.active_template = nil if @view.controller
return result
end
end
答案 2 :(得分:3)
使用<% __FILE__ %>
获取当前视图的完整文件路径,但只能在 文件本身中使用它而无需编写一些帮助程序
答案 3 :(得分:1)
我有一个类似的问题。我发现<%= params[:controller] %>
和<%= params[:action] %>
符合我的需要,即将控制器名称和操作名称添加为body标签上的类。
以防万一可以帮助任何人。 :)
答案 4 :(得分:1)
我目前正在使用Peter Ehrlich解决方案的修改版本。结果字符串的格式为controller_name/view_name
,例如users/new
,这意味着它可以在以后直接传递给render
,或者更改为适合其他用途。我只用Rails 4.2试过这个,虽然据我所知它应该一直回到3. x es。
ActionView::Base.class_eval do
attr_accessor :current_template
end
ActionView::TemplateRenderer.class_eval do
def render_template_with_current_template_accessor(template, layout_name = nil, locals = {})
@view.current_template = template.try(:virtual_path)
render_template_without_current_template_accessor(template, layout_name, locals)
end
alias_method_chain :render_template, :current_template_accessor
end
答案 5 :(得分:1)
出于调试目的,您可以使用here中的gem'current_template'。
此gem检查日志文件并显示视图/部分模板的文件名。
例如:
此外,您只需添加此行
即可 <%= "#{`tail log/development.log`}".scan(/\s[a-z]+\/\S+/) %>
到你的layout / application.html.erb。