Возможно ли это - да.
В 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, :integer, 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 действительно может сделать это лучше.