Как мне обрабатывать данные, которые должны сохраняться в базе данных, но не являются надлежащей моделью, в Ruby on Rails?

StackOverflow https://stackoverflow.com/questions/114192

  •  02-07-2019
  •  | 
  •  

Вопрос

Представьте себе веб-приложение, написанное на Ruby on Rails.Часть состояния этого приложения представлена в виде фрагмента данных, который не соответствует описанию модели.Этот дескриптор состояния должен сохраняться в той же базе данных, что и модели.Его отличие от модели заключается в том, что должен существовать только один экземпляр его класса и у него нет связей с другими классами.

Кто-нибудь сталкивался с чем-нибудь подобным?

Это было полезно?

Решение

Судя по вашему описанию, я думаю, что плагин rails-settings должен делать то, что вам нужно.

Из Readme:

"Настройки - это плагин, который упрощает управление таблицей глобальных пар ключ-значение.Думайте об этом как о глобальном хэше, хранящемся в вашей базе данных, который использует простые методы, подобные ActiveRecord, для манипулирования.Следите за любыми глобальными настройками, которые вы не хотите жестко кодировать в своем приложении rails.Вы можете хранить объекты любого типа.Строки, числа, массивы или любой другой объект."

http://github.com/Squeegy/rails-settings/tree/master

Другие советы

Если это данные, и они есть в базе данных, то это часть модели.

На самом деле это не проблема RoR;это общая проблема проектирования OO.

Если бы это был я, я бы, вероятно, нашел способ концептуализировать данные как модель, а затем просто сделал их синглтоном с помощью фабричного метода и частного конструктора.

В качестве альтернативы, вы могли бы рассматривать это как форму ведения журнала.В этом случае у вас просто был бы класс Logger (также singleton), который считывает / записывает базу данных напрямую и вызывается в начале и конце каждого запроса.

В Rails, если данные находятся в базе данных, то они находятся в модели.В этом случае модель может называться "Configuration", но она по-прежнему сопоставлена классу ActiveRecord в вашей системе Rails.

Если эти данные действительно статичны, возможно, вам вообще не понадобится база данных.Вы могли бы использовать (в качестве примера) переменную в вашем прикладном контроллере:

class ApplicationController < ActionController::Base
  helper :all 
  @data = "YOUR DATA HERE"   
end

Существует несколько подходов, которые можно использовать для создания экземпляра данных для использования в приложении Rails.

Я не уверен, что понимаю, почему вы говорите, что это не может вписаться в модель Rails.

Если это просто сложная структура данных, просто сохраните кучу кода Ruby в текстовом поле в базе данных :-)

Если, например, у вас есть сложный вложенный хэш, который вы хотите сохранить, назначьте следующее текстовому полю "данные":

ComplexThing.data = complex_hash.inspect

Когда вы захотите перечитать его еще раз, просто

complex_hash = eval ComplexThing.data

Позвольте мне указать еще на 2 момента, касающиеся этого решения:

  • Если ваша структура данных не является стандартными классами Ruby, простая проверка может этого не сделать.Если вы где-нибудь видите #<MyClass:0x4066e3c> , что что-то не сериализуется должным образом.
  • Это наивная реализация.Возможно, вы захотите ознакомиться с реальными решениями маршалинга, если вы рискуете получить данные в юникоде или если вы действительно сохраняете много пользовательских классов.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top