我有一个来自第三方数据库的现有表,我正在挂钩存储键/值对。两列,一列为“param”,另一列为“paramvalue”。我需要访问我正在开发的插件应用程序的这些存储值,并且我正在考虑将值放入最简单格式以在整个应用程序中使用的最佳方法。我想到的是以某种方式在AR模型中构建动态方法,我可以根据参数名称调用它。类似SysParams.base_url的东西会映射到[base_url,http://www.thesite.com]的记录。有点像Record.find_by_column_name
之类的内置AR方法最终的问题:这样的事情可能吗?如果是这样,这是个好主意吗?如果是这样,怎么会这样呢?
答案 0 :(得分:1)
这是我如何处理这些东西,但如果密钥数量不是太大,这只是一个好主意。
1.创建模型以访问您的数据库,如下所示:
应用程序/模型/ config_table.rb
class ConfigTable < ActiveRecord::Base
# whatever you need here
end
2.创建初始化程序
配置/初始化/ admin_config.rb
class AdminConfig
# uncomment this if in development
#unloadable
# I assume you have the fields key/value in your
# ConfigTable you may need to change this
def self.all
# create a cached hash
@cache ||= ConfigTable.all.inject({}) do |hsh, c_config|
hsh[c_config.key.to_sym] = c_config.value
hsh
end
end
def self.get(key)
self.all[key.to_sym]
end
def self.[](key)
self.all[key.to_sym]
end
end
用法示例(Appp中的任何位置):
AdminConfig.get(:hostname)
AdminConfig.get('hostname')
AdminConfig[:hostname]
AdminConfig['hostname']
如果由于更改需要重新加载配置,则必须重新启动所有正在运行的App实例。您当然可能需要调整表格/列的范围:)
如果您需要更大的键/值集解决方案,我建议您将其存储在轨道缓存中,也可以使用redis-store:)
玩得开心