2010-11-20 8 views
5

मैं एक रेल मॉडल के लिए एक कस्टम आईडी (ऑटो-वृद्धिशील डिफ़ॉल्ट वाले के बजाय) का उपयोग करने में सक्षम होना चाहता हूं। असल में, सभी आईडी आईट्यून्स स्टोर आईडी होंगे, जो केवल लंबे पूर्णांक हैं। क्या डिफ़ॉल्ट ऑटो-वृद्धिशील आईडी को बंद करना संभव है और उसे सेट करने की आवश्यकता है? इन आईडी को अन्य मॉडलों में विदेशी कुंजी के रूप में भी इस्तेमाल किया जाएगा।कस्टम गैर ऑटो-वृद्धिशील ActiveRecord "id" कॉलम संभव है?

उत्तर

6

कुछ इस तरह:

create_table :blah, {:id => false} do |t| 
    t.int :my_custom_int_id 
end 
execute "ALTER TABLE blah ADD PRIMARY KEY (my_custom_int_id);" 
+0

ऐसा लगता है कि मैं क्या देख रहा था, धन्यवाद। – markquezada

+1

आपको अपने मॉडल में 'set_primary_key: my_custom_int_id' (Rails 3) या' self.primary_key =: my_custom_int_id' (Rails 4) जोड़ने की भी आवश्यकता होगी। – gregoltsov

2

आप मॉडल को बचाने से पहले आप मैन्युअल आईडी सेट कर सकते हैं।

a = Model.new 
a.id = 8888 #from itunes 
a.save 

हालांकि, अगर आप इस दृष्टिकोण के बजाय itunes_id नामक एक अलग क्षेत्र पर विचार करना चाहिए।

+0

मैं वर्तमान में वर्णन के रूप में एक अलग 'itunes_id' फ़ील्ड का उपयोग कर रहा हूं। समस्या यह है कि मैं जिस एपीआई का उपयोग कर रहा हूं, वह आईट्यून्स आईडी देता है, इसलिए यह itunes_id -> मेरे मॉडल आईडी के लिए एक अतिरिक्त लुकअप करने का दर्द है। – markquezada

+1

मुझे वाकई यह पसंद है कि आपने क्या कहा था, लेकिन आपको अपनी सलाह भी दी .. सर्वोत्तम अभ्यास ... :) – baash05

+0

@ डेवेटफ्लो यह व्यक्तिगत राय आईएमओ का सर्वोत्तम अभ्यास नहीं है। –

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