Как мне обрабатывать данные, которые должны храниться в базе данных, но не является подходящей моделью в Ruby on Rails? - PullRequest
5 голосов
/ 22 сентября 2008

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

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

Ответы [ 5 ]

3 голосов
/ 22 сентября 2008

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

Из файла Readme:

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

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

3 голосов
/ 22 сентября 2008

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

1 голос
/ 22 сентября 2008

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

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

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

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

1 голос
/ 22 сентября 2008

Это на самом деле не проблема RoR; это общая проблема дизайна ОО.

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

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

0 голосов
/ 22 сентября 2008

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

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

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

ComplexThing.data = complex_hash.inspect

Если вы хотите прочитать его обратно, просто

complex_hash = eval ComplexThing.data

Позвольте мне указать еще 2 вещи об этом решении:

  • Если ваша структура данных не является стандартными классами Ruby, простая проверка может этого не сделать. Если вы видите где-то # , что-то не сериализуется должным образом.
  • Это наивная реализация. Возможно, вы захотите проверить реальные решения для сортировки, если вы рискуете получить данные в кодировке Unicode или если вы действительно сохраняете много пользовательских классов.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...