2015-11-08 7 views
0

Я пытаюсь найти лучший способ настроить мои модели для хранения данных цветовой палитры. Вот как я вижу установку:Correct Rails Дизайн модели ActiveRecord

class Colour < ActiveRecord::Base 
    has_many :palettes 
end 

Colour обладает следующими свойствами:

:hex_value:string 
:rgb_value:string 
:association_id:integer 
:association_type:string 

Palette объект

class Palette < ActiveRecord::Base 
    has_many :colours 
end 

Palette обладает следующими свойствами:

:name:string 
:colours: ? 

Product объект

class Product < ActiveRecord::Base 
    has_one :palette 

end 

Product обладает следующими свойствами:

:name:string 
:palette_id:integer 

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

:name:string 
:colours: array[:color:object, :percentage:decimal] 

Кроме того, я разработал Colour объект быть полиморфными, как я хочу, чтобы иметь возможность использовать это позже.

Надеюсь, это имеет смысл, это, безусловно, самый передовой дизайн данных, который я сделал до настоящего времени.

+0

Я предполагаю, что вы делаете это приложение как экстерьер, потому что это очень странные классы: D Что вы ищете, хотя есть has_many что-то, через: something_else отношения, они очень хорошо описаны в Rails Guides http : //guides.rubyonrails.org/association_basics.html#the-has-many-through-association –

ответ

0

Вы должны использовать has_many :through association для моделей Colour и Palette. Choosing that instead of a has_and_belongs_to_many association позволит вам использовать таблицу соединений для хранения ваших процентных данных.

+0

Итак, между 'Colour' и' Palette' у меня будет другая модель с именем say 'ColourMatch', которая имеет атрибут': процент '? И тогда 'Palette' будет ссылаться на« Colour »следующим образом:' has_many: colors, through: colourmatchs'? – colebowl

+0

'has_many: цвета, через:: colourmatches' на самом деле (Rails обрабатывает множественные числа довольно хорошо), но да. Кроме того, 'Colour' будет ссылаться на' Palette' с 'has_many: палитры, через:: colourmatches' – Jason

+0

Спасибо @Jason! Это именно то, что я был после! – colebowl

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