2009-06-23 4 views
10

इस बारे में जाने का सबसे अच्छा तरीका क्या है। क्या माइग्रेशन में कुछ ऐसा है जो मैं कर सकता हूं? अग्रिम में धन्यवाद।रेल में प्राथमिक कुंजी के लिए प्रारंभिक मान सेट करना (यानी पहली ऑब्जेक्ट की आईडी 1 के बजाय 1000 है)

उत्तर

13

यह डेटाबेस विशिष्ट है। बस अपने प्रवास में निम्नलिखित की तरह कुछ करना:

class MyMigration < ActiveRecord::Migration 
    def self.up 
    create_table :my_table do |t| 
     # ... 
    end 
    execute "ALTER TABLE my_table AUTO_INCREMENT = 1000" # for MySQL 
    end 

    def self.down 
    # ... 
    end 
end 

या वास्तव में, और भी बेहतर, के रूप में बने द्वारा सुझाए गए:

def self.up 
    create_table :my_table, :options => "AUTO_INCREMENT = 1000" do |t| 
     # ... 
    end 
    end 

डेटाबेस विशिष्ट माइग्रेशन को लेकर सतर्क है, हालांकि रहो! किसी भी एसक्यूएल का उपयोग करना जो आपके डेटाबेस के लिए विशिष्ट है, अन्य डेटाबेस के साथ संगतता तोड़ देगा और आम तौर पर एक अच्छा विचार नहीं है।

+0

माइग्रेशन डेटाबेस स्वतंत्र होना चाहिए। क्या होगा यदि आप जिस डेटाबेस पर माइग्रेशन चला रहे हैं वह उस विकल्प का समर्थन नहीं करता है? निष्पादन शायद एक अपवाद उठाएगा। मैं सीधे डेटाबेस पर कमांड चलाऊंगा। बीटीडब्ल्यू, मैं समाधान से सहमत हूं। –

+0

@weppos, इसे सीधे डेटाबेस पर चलाना आपको माइग्रेशन का लाभ लूट देगा, जिसका उपयोग अन्य डेटाबेस में आसानी से आपके डेटाबेस स्कीमा को पोर्ट करने के लिए किया जा सकता है। बेशक, एक अन्य विक्रेता से डेटाबेस में पोर्टिंग करने वाला दूसरा प्रमुख लाभ शून्य होगा। – molf

+0

हाय मॉल्फ, आप AUTO_INCREMENT से पहले एक डबल कोट खो रहे हैं। –

9

"विकल्प" विकल्प में पारित कोई भी स्ट्रिंग तालिका बनाता है जो SQL कथन के अंत में जोड़ा जाएगा। सर्वश्रेष्ठ प्रणालियां।

def self.up 
    create_table :my_table, :options => "AUTO_INCREMENT = 1000" do |t| 
     # ... 
    end 
end 
+0

यह स्क्लाइट और स्क्लेसर सर्वर पर काम नहीं कर रहा है – yossico

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