我已经设置了一个简单的“设置”模型,因此我可以创建一些用户可修改的全局变量,我可以在整个应用程序中使用它。
此模型包含var_name
和value
列。 var_name
是主键。
我可以使用Setting.find('my_variable_name')
来访问这些内容,但是每次都会生成数据库查询。
我希望能够“缓存”一次设置,而不是每次都查询数据库 我不确定正确的方法,我还是Rails的新手。
我想象我的应用程序控制器中有settings = Setting.all
之类的东西将所有设置放在一个变量中,然后创建一种操作单个变量的方法 - 用settings.my_variable_name
之类的方法调用它。 。
......但我不知道如何:)
任何建议都将不胜感激。感谢。
答案 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
中存储的结果。