我可以在JSON on Rails模型中使用JSON文件作为数据源吗 有可能-是的。但是如何将其与JSON文件一起使用?这是个好主意吗?

我有一个包含一些数据的JSON文件,我喜欢创建一个模型,该模型表示一个来自JSON文件的数据,例如activeRecord类。

我的JSON看起来很笨拙(不是真实的数据只是一个例子):

[
 {
  "name": "Test","model": "L33D","value": 69
 },{
  "name": "Test2","model": "Chill","value": 420
 },{
  "name": "Test3","model": "Banana","value": 1337
 }

]

因此,有一个模型可以写MyModel.find by :name "test3"

如何为与数据库无关的数据编写模型?还是我只做普通的红宝石并编写普通的类?

straybird9 回答:我可以在JSON on Rails模型中使用JSON文件作为数据源吗 有可能-是的。但是如何将其与JSON文件一起使用?这是个好主意吗?

有可能-是的。

在Rails中,您拥有ActiveModel::Model,这是一个包含验证,属性分配,表单集成,多态路由等的模块。除通常由ActiveRecord提供的实际持久层之外,几乎所有其他内容。您还可以仅通过包含子模块来选择功能。

从Rails 5开始,您还拥有ActiveModel::Attributes,它为过去的内部功能提供了公共api。它提供类型转换和定义默认值的好方法。

class MyModel
  include ActiveModel::Model
  include ActiveModel::Attributes # not included in the above
  attribute :awesomeness,:integer,default: 0
  # ...
end

但是如何将其与JSON文件一起使用?

您可以创建一个类方法或单独的呼吸类,以加载和解析JSON文件并创建模型实例:

class MyModel
  include ActiveModel::Model
  include ActiveModel::Attributes # not included in the above
  attribute :awesomeness,default: 0
  # ...

  def self.all
    data = JSON.parse(File.open('/path/to/file.json'))
    data.map do |hash|
      new(hash)
    end
  end
end

这是个好主意吗?

除非用例非常简单,否则不会。要查找单个条目,您必须解析并将整个文件加载到内存中。然后,您必须使用可枚举的基本数组操作。任何种类的数据库系统都经过优化,可以更有效地执行此操作。

如果要部署到任何类型的临时文件系统(如Heroku),则它与SQLite具有相同的缺点。对文件的任何更改将定期被完全覆盖。

如果通过git进行部署,这还意味着您必须将数据检入代码库。这很少是一个好主意,因为它会极大地增加用户流失和筛选所需的噪声量,以查找代码库中的实际更改。

任何nosql或sql数据库都可以更好地做到这一点。

,

您将编写普通的旧Ruby并提供所需的功能。 ActiveModel在这里并不是真的有用。

如果您正在读取输出JSON的RESTful API,则可以使用ActiveReource,但如果仅从磁盘上加载文件,那将无济于事。

本文链接:https://www.f2er.com/3144568.html

大家都在问