将数据库查询保存到变量

时间:2013-03-10 00:04:08

标签: ruby-on-rails ruby-on-rails-3

我已经设置了一个简单的“设置”模型,因此我可以创建一些用户可修改的全局变量,我可以在整个应用程序中使用它。 此模型包含var_namevalue列。 var_name是主键。

我可以使用Setting.find('my_variable_name')来访问这些内容,但是每次都会生成数据库查询。

我希望能够“缓存”一次设置,而不是每次都查询数据库 我不确定正确的方法,我还是Rails的新手。

我想象我的应用程序控制器中有settings = Setting.all之类的东西将所有设置放在一个变量中,然后创建一种操作单个变量的方法 - 用settings.my_variable_name之类的方法调用它。 。
......但我不知道如何:)

任何建议都将不胜感激。感谢。

1 个答案:

答案 0 :(得分:4)

尝试将此添加到您的设置模型

class Setting < ActiveRecord::Base
  def self.fetch(name)
    fetch_all.detect { |s| s.var_name == name }
  end

  def self.fetch_all
    @fetch_all ||= Setting.all
  end

  def self.reload_all!
    @fetch_all = Setting.all
  end
end

创建一些设置,

Setting.create(var_name: 'domain', value: 'google.com')
Setting.create(var_name: 'subdomain', value: 'www')

然后,您可以使用Setting.fetch('domain').value #=> 'google.com'获取设置。

Settings.fetch('domain')    #=> Hits the database with Settings.all
Settings.fetch('subdomain') #=> Hits the results in @fetch_all
Settings.fetch('domain')    #=> Hits the results in @fetch_all

@fetch_all ||= all会在第一次调用Setting.all时致电Setting.fetch_all,并将结果存储在@fetch_all中。后续调用将使用@fetch_all中存储的结果。