我对rails很新,所以如果我使用错误的术语,我会道歉.
我有一个模型Menuitem,我想在布局中显示内容.如何将实例变量传递到布局?
我正在寻找某种布局助手,但我找不到任何东西.我还在考虑在应用程序控制器中定义实例变量以在布局中访问它,这会起作用吗?如果是这样,最好的办法是什么?
谢谢!
解决方法
我要注意两件事.首先,您可能不希望每次在应用程序中呈现任何页面时都执行此查询.你肯定想要缓存你的MenuItems.其次,在MenuItems类上放置一个方便方法来缓存这个值可能会有所帮助.所以,如果我定义一个方法
def MenuItem.all_for_menu @@all_for_menu ||= MenuItem.find(:all) #returns value if exists,or initializes it end
我可以在布局中调用MenuItem.all_for_menu并获取所有菜单项.当您添加新的或编辑新的时,您必须使其无效.
另一种缓存方法是使用标准缓存调用将数据放入部分并缓存该片段:
<% cache(:controller => "menu_items",:action => "list",:action_suffix => "all_menu_items") do %> <%= render :partial => "menu",:collection => MenuItem.all_for_menu %> <% end %>
然后,您可以通过调用以使该片段到期:
expire_fragment(:controller => "menu_items",:action_suffix => "all_menu_items")