2012-12-14 19 views
6

मैं रेल 3.2.2 में हूं और मुझे एक संस्करण वर्ग है:स्व निर्देशात्मक "जुड़वां" has_one संघ

class Variant < ActiveRecord::Base 

    has_one :twin_variant 

end 

मैं इस वर्ग से दो वस्तुओं संबद्ध करने के लिए सक्षम होने के लिए चाहते हैं, उसके "जुड़वाँ बन गया "। मैं बनाना चाहते हैं:,

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

v1.twin_variant = v2 

फिर 2 वस्तुओं एक दूसरे के साथ जुड़े हो जाना चाहिए, ताकि:

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

तो मैं एक जुड़वां संस्करण बनाने के लिए एक विधि करना चाहते हैं :

v1.twin_variant 
=> v2 

v2.twin_variant 
=> v1 

क्या यह संभव है? मुझे एसोसिएशन कैसे बनाना चाहिए?

उत्तर

13

को देखते हुए निम्नलिखित मॉडल

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 

आप सेटअप

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

v1.twin_variant = v2 
v2.twin_variant = v1 

और साथ चक्रीय संबंध आपके साथ

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

धन्यवाद इस जाँच कर सकते हैं कर सकते हैं, यह बहुत अच्छा काम करता है! – Augusto