【发布时间】:2019-02-16 08:18:58
【问题描述】:
通过 Rails 5.2.1 初始化程序,我将 customers.json 导入到无表模型,而不使用任何 DB 功能。这个 JSON 数据需要在 Rails 启动时加载到内存中,然后在整个应用程序中根据需要进行访问。在应用重启时,它会再次重新加载。
到目前为止我做了什么:
initializers/json_loader.rb
data = JSON.parse(File.read('tmp/customers.json'), symbolize_names: true)
JSONDatastore.new(data) # load into model
app/models/json_datastore.rb
class JSONDatastore
def initialize(records)
@records = records
end
def self.records
return @records
end
end
问题:当我这样做时,在控制器中我无法获取在初始化程序中设置的填充 JSONDatastore 实例。它在初始化程序中填充了 JSON 数据,但是当我尝试通过调用 JSONDatastore.records 在其他控制器的某处访问它时,即使我设置了 config.cache_classes = true,我也会得到 nil
有没有办法让我获取填充初始化程序的JSONDatastore 实例并在我的控制器中访问它?我尝试让我的模型成为单例,并且可以通过JSONDatastore.instance 获取实例,但@records 又是nil。
【问题讨论】:
-
new应该在类实例上定义。你的是永远不会被调用的实例方法。 -
对不起@AlekseiMatiushkin,它应该是
initialize,而不是new- 我只是打错了。你能再看看吗? -
有两个不同的
@records:initialize中赋值的一个是实例变量,你从中读取的一个是类实例变量 i>. -
感谢@AlekseiMatiushkin,删除了类 ivar 定义。仍然为零。
标签: ruby-on-rails json ruby