¿Es posible obtener el nombre de la vista actualmente renderizada desde el interior del diseño?¿Cómo obtener el nombre de vista actual de la plantilla de diseño en Rails?
Respuesta
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 %>" >
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
No funciona para mí. Estoy intentando '<% = controller.active_template%>' en la plantilla. Dice 'método indefinido' active_template'' – Evgenii
<% __FILE__%> le dará el nombre de la plantilla actual – Naveed
Esto dice: "constante no inicializada ActionView :: CompiledTemplates :: FILE" – user1934428
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. :)
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
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
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:
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.
- 1. Rails 3, encuentra la vista actual en el diseño
- 2. ¿Cómo obtener el nombre de archivo de la plantilla actual dentro de la plantilla de Jinja2?
- 3. Rails3 obtener el nombre del diseño actual dentro de la vista
- 4. Obtener el diseño de la vista
- 5. ¿Cómo obtener el nombre de la tarea actual de rake en mi modelo de Rails?
- 6. ¿Obtener el nombre de la clase actual?
- 7. En Boost.Test, ¿cómo obtener el nombre de la prueba actual?
- 8. ¿Cómo obtener el nombre de la función actual?
- 9. obtener el nombre de la función actual en javascript
- 10. Obtener el nombre del controlador en la plantilla Ver T4
- 11. Cómo obtener el nombre de host actual en Heroku
- 12. la variable personalizada en Rails ver el nombre de archivo
- 13. ¿Cómo obtener el nombre de contexto actual de rspec?
- 14. ¿Recuperar el nombre de vista actual en ASP.NET MVC?
- 15. Incluyendo el nombre de la rama actual en la plantilla de confirmación
- 16. Rails 3: ¿Obtener el espacio de nombres actual?
- 17. ¿Cómo obtener el nombre de nodo primario del nodo actual?
- 18. ¿Cómo obtener el objeto de vista de foco actual en el Servicio?
- 19. Backbone.js - Obtener matriz JSON en la plantilla de vista
- 20. Obtener el nombre del archivo de secuencia de comandos actual
- 21. ¿Cómo obtener el método actual en Rails 3?
- 22. rails, activerecord, obtener la especificación de conexión actual
- 23. Obtener la ruta actual de la página en el archivo de diseño de Middleman
- 24. ¿Puede obtener el nombre de usuario de DB, pw, el nombre de la base de datos en Rails?
- 25. Cómo obtener el nombre del tema actual en Magento
- 26. ¿Cómo obtener el nombre del módulo actual en Haskell
- 27. ¿Cómo puedo obtener el nombre del directorio actual en Javascript?
- 28. ¿Cómo obtener el nombre actual del proceso en Linux?
- 29. ¿Cómo obtener el nombre del método actual en Delphi 7?
- 30. ¿Cómo obtener el nombre de host en la plantilla de freemarker?
¿Por qué querrías hacer eso? –
qué rieles es? –