Estoy trabajando en una aplicación RoR y estoy trabajando en escribir el componente del blog. Estoy planeando tener un archivo de diseño que muestre todas las etiquetas de la base de datos en cada página dentro del componente de blog. Sé cómo crear y usar un archivo de diseño diferente de application.html.erb, pero lo que no sé es cómo leer la lista de etiquetas de la base de datos para cada acción en los distintos controladores. No me gustaría crear la variable de instancia apropiada dentro de cada acción. ¿Cuál es una forma apropiada de abordar esto?Ruby on Rails Layout leyendo datos del modelo
Respuesta
Utilice un before_filter
en su application_controller
para crear la variable de instancia:
before_filter :populate_tags
protected
def populate_tags
@sidebar_tags = Tag.all
end
Defina un método privado en ApplicationController y cárguelo allí con un before_filter. Dado que todos los controladores heredan de ApplicationController, se ejecutará antes de cada acción.
Otra idea sería cargarla a través de un método auxiliar, pero preferiría la primera solución.
Yo recomiendo usar un before_filter, sino también el almacenamiento en caché el resultado en memcached. Si usted va a ser la realización de esta acción en cada petición que lo mejor es hacer algo como esto:
class ApplicationController
before_filter :fetch_tags
protected
def fetch_tags
@tags = Rails.cache.fetch('tags', :expires_in => 10.minutes) do
Tag.all
end
end
end
Esto asegurará que las etiquetas se almacenan en caché durante un determinado período de tiempo (por ejemplo 10 minutos), por lo que solo tiene que hacer esta consulta una vez cada 10 minutos, en lugar de hacerlo en cada solicitud.
Puede mostrar sus etiquetas en la barra lateral, por ejemplo, si tiene una barra lateral _side que se muestra en sus diseños, podría hacer lo siguiente.
#_sidebar.html.erb
render @tags
- 1. Ruby on Rails Plural Nombre del modelo
- 2. Ruby on Rails - Variable del controlador de acceso del modelo
- 3. Ruby-on-Rails: Ayuda con render: layout => false
- 4. ruby on rails logic for a partial in a layout
- 5. Ruby on Rails - atributos anidados: ¿Cómo accedo al modelo padre del niño modelo
- 6. Ruby on Rails: ¿cómo validar un modelo sin registro activo?
- 7. Acceso a current_user desde un modelo en Ruby on Rails
- 8. Ruby on Rails Switch
- 9. ruby on rails modelo de arquitectura, vista y DTOs
- 10. Ruby on Rails enviar
- 11. Ruby vs. Ruby on Rails
- 12. Contador de incrementos de Ruby on Rails en el modelo
- 13. Ruby on Rails convención plural (controlador) y singular (modelo) - explicación
- 14. Ruby on Rails. Rutas Unicode
- 15. Docsplit Ruby on Rails
- 16. Ruby on Rails: descargable
- 17. Ruby on Rails will_paginate
- 18. Ruby On Rails Modelo de usuario para múltiples tipos
- 19. Ruby on Rails: cómo verificar si el modelo existe
- 20. Anidamiento de modelo profundo en Ruby on Rails
- 21. ¿Es posible anotar solo un modelo en Ruby on Rails?
- 22. Ruby on Rails versus Python
- 23. HTML 5 Ruby on Rails Eventos del lado del servidor
- 24. Ruby on rails connection problem
- 25. Evento/Observador Impulsado por Ruby on Rails
- 26. Ruby on Rails config.secret_token error
- 27. Ruby on Rails Rake Error
- 28. Almacenar datos en Ruby on Rails sin base de datos
- 29. Ruby on Rails with Repository Pattern?
- 30. Columna decimal Ruby on Rails
Esta es exactamente la respuesta que necesitaba. Pensé en usar el before_filter, pero no en el application_controller. ¡Gracias! –
Busque el almacenamiento en caché de fragmentos y 'read_fragment' también. Querrá guardar en caché ese bit de etiquetas y evitar golpear a menos que el fragmento sea obsoleto; de lo contrario, podría agregar una sobrecarga significativa a todo el sitio. –