Dos cosas que me gustaría tener en cuenta. En primer lugar, es probable que no desee realizar esta consulta cada vez que represente una página en su aplicación. Definitivamente desea almacenar en caché sus elementos de menú. En segundo lugar, podría ser útil poner un método de conveniencia en la clase MenuItems para almacenar este valor en caché. Por lo tanto, si se define un método
def MenuItem.all_for_menu
@@all_for_menu ||= MenuItem.find(:all) #returns value if exists, or initializes it
end
puedo llamar MenuItem.all_for_menu en mi diseño y obtener todos los elementos de menú. Cada vez que agregue uno nuevo o edite uno, tendrá que invalidarlo.
Otro método de almacenamiento en caché sería poner los datos en un parcial y almacenar en caché ese fragmento usando la llamada de almacenamiento en caché estándar:
<% cache(:controller => "menu_items",
:action => "list",
:action_suffix => "all_menu_items") do %>
<%= render :partial => "menu", :collection => MenuItem.all_for_menu %>
<% end %>
A continuación, puede expirar ese fragmento llamando:
expire_fragment(:controller => "menu_items", :action => "list", :action_suffix => "all_menu_items")
sentimos que debería aclarar. No me refiero a una Vista, me refiero a mostrarlos en un diseño. – puttputt