模型属于另一个模型中的多个属性

时间:2012-04-10 12:42:31

标签: ruby-on-rails ruby attributes polymorphism has-one

这可能是一个愚蠢的问题,但我在这里有点混淆:

我有一个用户模型,它有两个属性:头发和眼睛,可以有一个颜色值。

不是在用户表的头发和眼睛列中将颜色作为字符串引用两次,而是让我的属性将指向与我的用户模型关联的单独颜色模型。

我无法弄清楚如何做到这一点。我需要has_one,has_many或多态关联吗?如何设置用户和颜色模型?我是否需要为头发和眼睛创建特定的模型?

以下是我在rails控制台中想要的内容:

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  

我知道这是一个非常基本的问题,但我真的需要一些帮助!

谢谢;)

1 个答案:

答案 0 :(得分:1)

用户方案应包含hair_color_ideyes_color_id字段

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

所以

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