2010-10-22 16 views
5

मैं एक माता पिता/बच्चे जैसे हमारे उपयोगकर्ताओं तालिका के माध्यम से संबंध, मॉडलों के साथ है:एक मॉडल में विशिष्टता को मजबूर करने का सही तरीका? (Has_many: के माध्यम से)

class User < ActiveRecord::Base 

    # Parents relationship 
    has_many :children_parents, :class_name => "ParentsChild", :foreign_key => "child_id", :dependent => :destroy 
    has_many :parents, :through => :children_parents 

    # Children relatiopnship 
    has_many :parents_children, :class_name => "ParentsChild", :foreign_key => "parent_id", :dependent => :destroy 
    has_many :children, :through => :parents_children 
    ... 
end 

और parents_child.rb में:

class ParentsChild < ActiveRecord::Base 

    belongs_to :parent, :class_name => "User" 
    belongs_to :child, :class_name => "User" 

end 

अभी, यह संभव है माता-पिता के लिए एक ही बच्चे के रूप में एक ही उपयोगकर्ता को जोड़ने के लिए हमारे "बच्चों को जोड़ें" फॉर्म (केवल वेनिला नेस्टेड विशेषताओं का उपयोग करके) में। मुझे यकीन नहीं है कि माता-पिता चिल्ड रिलेशनशिप में विशिष्टता को मजबूर करने के लिए 'सही' तरीका क्या है, हालांकि मैं डेटाबेस परत (पाठ्यक्रम के माइग्रेशन का उपयोग करके) (parent_id, child_id) पर एक अद्वितीय इंडेक्स की ओर झुका रहा हूं।

मुझे यकीन है कि मैं UserController :: अद्यतन विधि में विशिष्टता बाधाओं को भी लागू कर सकता हूं, लेकिन उस कोड को बदलने से बचना पसंद करेंगे (अभी यह माता-पिता/बच्चों का बिल्कुल संदर्भ नहीं देता है, फ़ॉर्म में नेस्टेड विशेषताओं के लिए धन्यवाद/मॉडल) यदि संभव हो तो। मैं यह सुनिश्चित करने के लिए सबसे चिंतित हूं कि हम "उचित" समाधान का उपयोग करते हैं। ऐसा करने के लिए 'सही' या 'रेल' तरीका क्या है?

उत्तर

6

has_many का उपयोग करना: के माध्यम से, आप यह निर्दिष्ट कर सकते हैं: uniq एक विकल्प के रूप में, इस तरह:

has_many :parents, :through => :children_parents, :uniq => true 
+1

निश्चित रूप से पहले सरल संभव समाधान पर ध्यान दिया है चाहिए। धन्यवाद! –

+0

हां! मैं इस के साथ इतनी देर बिताता हूं, आपका जवाब बिल्कुल वही था जो मुझे चाहिए था। – Matthew

+5

या रेल में 4, 'है_मनी: माता-पिता, -> {uniq},: through =>: children_parents' – courtsimas

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^