2012-07-12 10 views

Respuesta

4

hice algo como esto para espacios de nombre del 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 %>" > 
3

El método método active_template_virtual_path devuelve la plantilla como un nombre de la siguiente forma "controlador/acción"

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 
+0

No funciona para mí. Estoy intentando '<% = controller.active_template%>' en la plantilla. Dice 'método indefinido' active_template'' – Evgenii

+1

<% __FILE__%> le dará el nombre de la plantilla actual – Naveed

+0

Esto dice: "constante no inicializada ActionView :: CompiledTemplates :: FILE" – user1934428

1

que tenían un parecido pregunta. Encontré <%= params[:controller] %> y <%= params[:action] %> para satisfacer mi necesidad, que era agregar el nombre del controlador y el nombre de la acción como clases en la etiqueta del cuerpo.

Por si acaso eso ayuda a alguien. :)

3

Uso <% __FILE__ %> para obtener la ruta completa del archivo de vista actual, pero sólo se puede utilizar desde dentro el propio archivo sin escribir algunos ayudantes

1

Actualmente estoy usando una versión modificada de Peter Ehrlich solución. La cadena resultante es de la forma controller_name/view_name, p. users/new, lo que significa que puede pasarse directamente al render más tarde o modificarse para adaptarse a otros usos. Solo he intentado esto con Rails 4.2, aunque hasta donde sé, debería funcionar hasta el 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 
0

Para propósitos de depuración, puede utilizar la gema 'current_template' de here.

Esta gema inspecciona el archivo de registro y muestra el nombre de archivo de la vista/plantilla parcial.

Por ejemplo:

enter image description here

Además, sólo tiene que añadir esta línea

<%= "#{`tail log/development.log`}".scan(/\s[a-z]+\/\S+/) %>

a su diseño/application.html.erb.

Cuestiones relacionadas