Модель должна принадлежать нескольким атрибутам в другой модели

Это может быть глупый вопрос, но я немного запутался здесь:

У меня есть модель пользователя, которая имеет 2 атрибута: волосы и глаза, которые могут иметь значение цвета.

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

Я не могу понять, как это сделать. Нужны ли ассоциации has_one, has_many или полиморфные ассоциации? Как настроить модели User и Colors? Нужно ли создавать специальные модели для волос и глаз?

Вот что я хочу в консоли рельсов:

u = User.first  
u.update_attribute(:hair, Color.find_by_name("blue")  
u.update_attribute(:eyes, Color.find_by_name("green")  
u.save  

u.eyes # green  
u.hair # blue  

Я знаю, что это довольно простой вопрос, но мне действительно нужна помощь здесь!

Спасибо ;)


person cl3m    schedule 10.04.2012    source источник


Ответы (1)


Схема пользователя должна содержать поля hair_color_id и eyes_color_id

class User < ActiveRecord::Base
  belongs_to :hair_color, class_name: "Color"
  belongs_to :eyes_color, class_name: "Color"
end

So.

u = User.new
u.hair_color = Color.find_or_create_by_name("blue")
u.eyes_color = Color.find_or_create_by_name("green")
u.save
...
u.hair_color.name
#=> blue
person fl00r    schedule 10.04.2012
comment
Большое спасибо, что так быстро ответили!! Я действительно застрял там! - person cl3m; 10.04.2012