我确定“全局变量”会让每个人脖子后面的头发站立起来。我想要做的是在一个acts_as_tree数据表中存储一个分层菜单(完成)。在application_helper.rb中,我通过查询数据库并遍历树(完成)来创建一个html菜单。我不想为每个页面加载执行此操作。Rails 3:缓存到全局变量
这里是我的尝试:
application.rb中
config.menu = nil
application_helper.rb
def my_menu_builder
return MyApp::Application.config.menu if MyApp::Application.config.menu
# All the menu building code that should only run once
MyApp::Application.config.menu = menu_html
end
menu_controller.rb
def create
# whatever create code
expire_menu_cache
end
protected
def expire_menu_cache
MyApp::Application.config.menu = nil
end
我的立场正确ñ ow是在第一次加载页面时,数据库确实被查询并建立了菜单。结果存储在配置变量中,并且数据库永远不会再为此命中。
这是不工作的缓存过期部分。当我将config.menu变量重置为零时,大概是下一次通过my_menu_builder时,它会检测到该变化并重建菜单,缓存新的结果。似乎没有发生。
问题:
是Application.config的好地方来存储这样的东西? 有没有人在这个缓存策略中看到明显的缺陷?
不要说过早的优化 - 这是我在阶段过早的优化迭代:)
谢谢!实现这一
我要将此作为回答,但要注意,jemminger的是同样正确的,但不是在它的面前尽可能多的信息。那正是我正在寻找的。 Rails.cache。现在Memcached对这个钉子来说太大了。 – 2011-02-18 06:48:12