Ruby on rails 将数据库查询保存到变量
我已经建立了一个简单的“设置”模型,这样我就可以创建一些用户可修改的全局设置,我可以在整个应用程序中使用这些设置。 此模型具有Ruby on rails 将数据库查询保存到变量,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我已经建立了一个简单的“设置”模型,这样我就可以创建一些用户可修改的全局设置,我可以在整个应用程序中使用这些设置。 此模型具有var\u name和value列。var\u name是主键 我可以使用Setting.find('my\u variable\u name')访问这些文件,该方法有效,但每次都会导致数据库查询 我希望能够将设置“缓存”一次,而不是每次都查询数据库。 我不确定该怎么做,我还是Rails新手 我设想在我的应用程序控制器中使用类似于settings=Setting.all的
var\u name
和value
列。var\u name
是主键
我可以使用Setting.find('my\u variable\u name')
访问这些文件,该方法有效,但每次都会导致数据库查询
我希望能够将设置“缓存”一次,而不是每次都查询数据库。我不确定该怎么做,我还是Rails新手 我设想在我的应用程序控制器中使用类似于
settings=Setting.all
的方法将所有设置放入一个变量中,然后创建一种从中操作单个变量的方法-使用类似于settings.my_variable\u name的方法调用它。
…但我不知道如何:)
如有任何建议,将不胜感激。谢谢。尝试将其添加到您的设置模型中
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.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
将调用设置。第一次设置时调用all
。调用fetch_all
并将结果存储在@fetch_all
中。后续调用将使用存储在@fetch\u all
中的结果,尝试将其添加到设置模型中
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.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
将调用设置。第一次设置时调用all
。调用fetch_all
并将结果存储在@fetch_all
中。后续调用将使用存储在@fetch\u all
Works中的结果。在我看来似乎很优雅。谢谢虽然由于我将var\u name
作为主键,我需要将代码的第3行从s.var\u name
更改为s.id
,但实际上,当您更新数据库中的一个变量时,fetch方法将返回旧值。如何获取新值?您可以添加一个名为self.refresh
的新方法,该方法执行@fetch\u all=Settings.all
。在我看来似乎很优雅。谢谢虽然由于我将var\u name
作为主键,我需要将代码的第3行从s.var\u name
更改为s.id
,但实际上,当您更新数据库中的一个变量时,fetch方法将返回旧值。如何获取新值?您可以添加一个名为self.refresh
的新方法,该方法执行@fetch\u all=Settings.all
。