2012-04-10 12 views
0

Dies ist eine dumme Frage sein könnte, aber ich bin hier etwas verwirren:Modell auf mehrere Attribute in einem anderen Modell gehören

ich ein Benutzermodell haben, die zwei Eigenschaften hat: Haare und Augen, die eine Farbe haben kann Wert.

Anstatt die Farbe als String zweimal in der Haar- und Augenspalte der Benutzertabelle zu referenzieren, würde ich lieber ein eigenes Farbmodell für mein Benutzermodell haben, auf das meine Attribute zeigen.

Ich kann nicht herausfinden, wie das geht. Brauche ich has_one, has_many oder polymorphe Assoziationen? Wie richte ich meine Benutzer- und Farbmodelle ein? Muss ich spezifische Modelle für Haare und Augen erstellen?

Hier ist, was ich in einer Schienen-Konsole will:

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 

Ich weiß, dass dies eine ziemlich grundlegende Frage ist, aber ich brauche wirklich etwas Hilfe hier!

Dank;)

Antwort

1

Benutzerschema hair_color_id und eyes_color_id Felder

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

So. enthalten sollte

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 
+0

Vielen Dank für die Beantwortung so schnell! Ich war wirklich dort stecken! – cl3m

Verwandte Themen