0

Мне нужно мнение о том, как структурировать мои модели для рельсов 4 приложения Я рисовал. Архитектура не должна быть слишком сложной, но я часами побывал в кругах, поэтому я выброшу ее в сообщество.Структурирование моделей рельсов для разных видов данных

У меня есть модель под названием «checkin», которая имеет поля «has_many». Каждое поле может иметь множество значений, которые могут быть одним из нескольких типов данных, которые могут увеличиваться с течением времени, но для стартеров будут только float и string. Как только поле добавляется к проверке, его тип данных не может измениться.

Подумайте о потере веса, когда некоторые люди захотят войти в систему только weight. Другие могут захотеть зарегистрировать weight, %bodyfat. Другие могли бы хотеть дополнительные поля для других метрик или текстовое поле для того, что настроение вы в

Так что у меня до сих пор:.

class Checkin < ActiveRecord::Base 
    has_many :fields 

class Field < ActiveRecord::Base 
    belongs_to :checkin 

А потом я собирался сделать

class DataFloat < ActiveRecord::Base 
    belongs_to :field 

class DataString < ActiveRecord::Base 
    belongs_to :string 

т.д.

схема проста только с ссылками на данный момент. DataFloat имеет поплавок и DataString имеет строку (как и следовало ожидать)

Тогда я буду использовать что-то вроде ActiveRecord::Base.descendants а (согласно THIS), чтобы создать поле выбора, так что вы можете выбрать то, что поле, когда вы добавьте его в чек.

Мой вопрос для всех тех экспертов MVC, есть ли это лучший способ сделать это. Будет ли я лучше иметь центральный объект «Данные», который расширяется DataFloat и DataString? Есть ли третий, лучший способ, о котором я не думал?

ответ

0

Кто-нибудь ...... bueller?

Мне это удалось, но потребовалось много времени, чтобы найти правильный термин для того, что я пытался сделать. Это в основном полиморфные ассоциации в обратном порядке.

Там фантастический учебник Руне Madsen здесь: https://gist.github.com/runemadsen/1242485

в основном я делаю это так:

class Field < ActiveRecord::Base 
    has_many :field_datas 
    has_many :data_ints, :through => :field_datas, :source => :data_object, :source_type => 'DataInt' 
    has_many :data_floats, :through => :field_datas, :source => :data_object, :source_type => 'DataFloat' 
    .... etc..... 

Тогда я:

class FieldData < ActiveRecord::Base 
    belongs_to :field 
    belongs_to :data_object, :polymorphic => true 
end 

И затем, наконец, фактические данные, которые представляют собой таблицу с идентификатором и одним столбцом:

class DataInt < ActiveRecord::Base 
    has_one :field_data, :as =>:data_object 
    has_one :field, :through => :datas 

И тогда для каждого типа данных будет класс DataType.

Думаю, мне, вероятно, придется писать специальные обработчики, чтобы убедиться, что все уничтожено и создано правильно, но в целом я доволен им.

Я хотел бы знать, есть ли у кого-то мнение о том, как это сделать.

Смежные вопросы