2012-12-14 12 views
6

Ich bin in Rails 3.2.2 und ich habe eine Variant-Klasse:selbst verweis „Zwilling“ has_one Verein

class Variant < ActiveRecord::Base 

    has_one :twin_variant 

end 

Ich möchte in der Lage sein, zwei Objekte dieser Klasse zu assoziieren wurden „Zwillinge ". würde ich gerne erstellen: Ich möchte eine Methode zum Erstellen einer Zwillingsvariante

v1 = Variant.new 
v1.name = "Fantastic variant" 
v1.save 

Dann: sollte

v2 = Variant.new 
v2.name = "Fantastic variant twin" 
v2.save 

v1.twin_variant = v2 

Dann werden die zwei Objekte miteinander assoziiert werden, so dass :

v1.twin_variant 
=> v2 

v2.twin_variant 
=> v1 

Ist das möglich? Wie soll ich den Verein aufbauen?

Antwort

13

mit dem folgenden Modell

class Variant < ActiveRecord::Base 
    attr_accessible :name, :variant_id 

    has_one :twin_variant, class_name: "Variant", foreign_key: :variant_id 
    belongs_to :twin, class_name: "Variant", foreign_key: :variant_id 
end 

Sie können mit

v1 = Variant.create(name: "Variant #1") 
v2 = Variant.create(name: "Variant #2") 

v1.twin_variant = v2 
v2.twin_variant = v1 

und Sie können dies mit

Variant.where(name: "Variant #2").first.twin_variant.name # "Variant #1" 
Variant.where(name: "Variant #1").first.twin_variant.name # "Variant #2" 
+0

Dank der zyklischen Beziehung Setup, es funktioniert super! – Augusto