2010-05-06 8 views

उत्तर

91

जहां तक ​​मुझे याद है सकते हैं, has_and_belongs_to_many आप एक सरल लुकअप तालिका जो अपने दो मॉडल का संदर्भ देता है।

उदाहरण के लिए,

कहानियां कई श्रेणियों से संबंधित हो सकती हैं। श्रेणियाँ कई कहानियां हो सकती हैं।

Categories_Stories Table 
story_id | category_id 

has_many :through आप किसी तृतीय मॉडल है जो जानकारी के विभिन्न अन्य टुकड़े जो मूल मॉडल में से किसी से संबंधित नहीं है स्टोर करने के लिए इस्तेमाल किया जा सकता देता है।

उदाहरण के लिए

व्यक्ति कई पत्रिकाओं की सदस्यता ले सकता है। पत्रिकाओं में कई ग्राहक हो सकते हैं।

इस प्रकार, हम बीच है, जो हमें पहले उदाहरण के लिए इसी तरह की एक तालिका देता है में एक सदस्यता मॉडल है, लेकिन अतिरिक्त गुणों के साथ कर सकते हैं।

Subscriptions Table 
person_id | magazine_id | subscription_type | subscription_length | subscription_date 

और इसी तरह। यदि आप एक स्वतंत्र इकाई के रूप में संबंध मॉडल के साथ काम करने की जरूरत संबंध के माध्यम से:

+24

ध्यान दें कि मेज की जरूरत है वर्णमाला के क्रम अर्थात categories_stories तालिका में नामित द्वारा करने के लिए - इस सम्मेलन यह काम आसान बनाता है। – Will

+0

धन्यवाद, मैंने अब अपनी पोस्ट बदल दी है – Dan

+0

उन्हें वर्णमाला क्यों होना चाहिए @ विल? – ctilley79

30

http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many

अंगूठे का सबसे सरल नियम से है कि आप एक has_many की स्थापना करनी चाहिए। आप रिश्ते मॉडल के साथ कुछ करने की ज़रूरत नहीं है, तो यह एक has_and_belongs_to_many संबंध स्थापित करने के लिए (हालांकि आप डेटाबेस में शामिल होने तालिका बनाने के लिए याद करने की आवश्यकता होगी) सरल हो सकता है। आपको has_many का उपयोग करना चाहिए: यदि आपको शामिल मॉडल पर सत्यापन, कॉलबैक या अतिरिक्त विशेषताओं की आवश्यकता है।

+3

साथ मैं भी जोड़ना होगा तरीकों का एक बहुत आवेषण has_and_belongs_to_many को रेल और has_many के लिए नहीं देखते हैं कि: के माध्यम से ।एसोसिएशन को मूल्यों का संग्रह सौंपने जैसी सभी विधियां, है_मनी के लिए प्रलेखन में दिखाई नहीं दे रही हैं: http://guides.rubyonrails.org/association_basics.html#has_and_belongs_to_many-association-reference के माध्यम से – e3matheus

13

अंगूठे का मेरा नियम है, क्या मैं यहां चेकबॉक्स की सूची के साथ प्राप्त कर सकता हूं? यदि ऐसा है, तो यह एक habtm संघ है। अगर मुझे रिश्ते के बारे में अधिक जानकारी प्राप्त करने के लिए चेकबॉक्स की आवश्यकता है, तो बस हां/नहीं, यह संबंधित है, फिर has_many का उपयोग करें: के माध्यम से। एचएबीटीएम एक साधारण_फॉर्म संग्रह_चेक_बॉक्स के साथ _ids विधि का उपयोग करने जितना आसान है। Has_many: अक्सर accepts_nested_attributes_for शामिल है।

4

आप has_many का उपयोग करना चाहिए: अगर के माध्यम से आप में शामिल होने के मॉडल पर सत्यापन, कॉलबैक, या अतिरिक्त विशेषताएँ की जरूरत है। के रूप में करने का विरोध किया stories_categories

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