2009-09-02 10 views
8

डाटामैपर में, कैसे एक को दो फ़ील्ड के संयोजन को निर्दिष्ट करना होगा अद्वितीय होना चाहिए। उदाहरण के लिए श्रेणियों में डोमेन के भीतर अद्वितीय नाम होना चाहिए:डेटामैपर मल्टी-फील्ड अद्वितीय इंडेक्स

class Category 
    include DataMapper.resource 
    property :name, String, :index=>true #must be unique for a given domain 

    belongs_to :domain 
end 
+0

कहीं मैंने देखा कि नामित कुंजी इस तरह समूहबद्ध होगी। यानी: unique_index =>: नाम और डोमेन दोनों के लिए नाम। –

उत्तर

1

क्या आपने दोनों गुणों को कुंजी के रूप में परिभाषित करने का प्रयास किया था? यकीन नहीं है कि मैंने कोशिश की है लेकिन इस तरह वे एक समग्र कुंजी बनना चाहिए।

class Category 
    include DataMapper::Resource 

    property :name, String, :unique_index => :u 
    property :domain_id, Integer, :unique_index => :u 

    belongs_to :domain 
end 
+0

वास्तव में पहले से ही एक कुंजी है, मैंने इसे कोड स्निपेट में शामिल नहीं किया है। –

16

आप दो गुण के लिए एक अनूठा सूचकांक बनाने के लिए unique_index मूल्यों एक बहु-स्तंभ अनुक्रमणिका बनाने करता है; उन हैश-रॉकेट्स के दाईं ओर पढ़ने के लिए महत्वपूर्ण है (यानी, अगर यह true था, तो आप सही होंगे)।

+0

यह गलत है क्योंकि इसकी आवश्यकता होगी कि दोनों नाम और डोमेन तालिका में अद्वितीय हों। मैंने जो पूछा था वह सेट (: नाम,: डोमेन) अद्वितीय कैसे बनाना है। –

+0

: unique_index =>: name_u ने वही किया जो मुझे चाहिए! धन्यवाद! –

+0

वास्तव में, हालांकि 'यू' प्रतीक स्पष्ट हो सकता था - उदाहरण के लिए 'index_on_name_and_domain_id' - यह वास्तव में सही है। डेटामैपर प्रॉपर्टी प्रलेखन पृष्ठ पर इंडेक्स अनुभाग देखें: http://rubydoc.info/github/datamapper/dm-core/master/DataMapper/Property। बयान एक बहु-स्तंभ समग्र अद्वितीय अनुक्रमणिका बनाते हैं। –

2

दरअसल, जॉन, Joschi के जवाब सही है: नामित के उपयोग:

property :name, String, :key => true  
property :category, Integer, :key => true 
+0

मैं डेटामैपर से दूर चले गए हैं, इसलिए यह बदल सकता है, लेकिन जब मैंने टिप्पणी लिखी, तो यह सही था। –

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