2

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

我可以使用 来访问这些Setting.find('my_variable_name'),它可以工作,但每次都会导致数据库查询。

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

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

任何意见,将不胜感激。谢谢。

4

1 回答 1

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.

于 2013-03-10T00:41:53.130 回答