2010-06-26 18 views
7

चलो कहते हैं कि मैं एक "उपयोगकर्ता" मॉडल बनाने के लिए निम्न आदेश का इस्तेमाल किया करते हैं:अपडेट कर रहा है मॉडल

script/generate model User username:string 

इस प्रवास rb फ़ाइल उपयोगकर्ता तालिका बनाने के लिए साथ-साथ user.rb फ़ाइल बनाता है। अब, मैं अपने उपयोगकर्ता मॉडल में एक ईमेल कॉलम जोड़ना चाहता हूं। ऐसा करने का सबसे अच्छा तरीका क्या है? क्या मैं इसे मैन्युअल रूप से करता हूं और माइग्रेशन फ़ाइल को हाथ से लिखता हूं या क्या ऐसा करने के लिए शॉर्टकट है? अगर मैं हाथ से माइग्रेशन लिखता हूं, तो क्या मुझे पिछली माइग्रेशन स्क्रिप्ट (सामने के टाइमस्टैम्प के साथ) के रूप में नाम देना होगा ताकि यह गारंटी हो सके कि यह पिछले माइग्रेशन के बाद चलता है?

उत्तर

6

टाइमस्टैम्प के बारे में चिंता न करें। यह स्वचालित रूप से जेनरेट किया जाएगा। आप एक

script\generate migration add_email_to_user email:string 

यह स्वचालित रूप से एक प्रवास फ़ाइल जो इस प्रकार दिखाई देगा पैदा करेगा कर सकते हैं:

class AddEmailToUser < ActiveRecord::Migration 
    def self.up 
    add_column :email, :string 
    end 

    def self.down 
    remove_column :email 
    end 
end 

फ़ाइल स्वरूप YYYYMMDDHHMMSS में टाइमस्टैम्प (रेल 2.1 और इसके बाद के संस्करण के लिए) के लिए होता है संलग्न फ़ाइल नाम के सामने।

2

Guide में माइग्रेशन उत्पन्न करने के बारे में जानकारी है। आप रेल जनरेटर का उपयोग करते हैं, यह सही ढंग से नामित फ़ाइलों को बनाने होंगे:

1) आप अभी तक इस कहीं भी तैनात नहीं किया है, या आप कोई आपत्ति नहीं है:

ruby script/generate migration AddEmailToUser email:string 
1

वैसे आप दो बातें कर सकते हैं डीबी डंपिंग और फिर से माइग्रेशन चला रहे हैं, फिर फ़ाइल को संशोधित करें। अपने डीबी से टेबल निकालें, और डीबी चलाएं: माइग्रेट करें। विकास में ऐसा करना आसान है।

2) यदि यह ऐप उत्पादन में है, या आप अपनी सभी टेबल नहीं छोड़ना चाहते हैं। फिर एक नई माइग्रेशन फ़ाइल बनाएँ। फिर इस नए माइग्रेशन में कॉलम जोड़ें/संशोधित/ड्रॉप करें। फिर डीबी चलाएं: माइग्रेट करें और नए बदलाव आपकी तालिका में प्रभावी होंगे। यह सबसे अच्छा अभ्यास है।

आपके माइग्रेशन का नामकरण करने के लिए, टाइमस्टैम्प का उपयोग किया जाता है क्योंकि रेल एक ऐसी टेबल तैयार करेंगे जो नवीनतम माइग्रेशन का ट्रैक रखती है। इसके लिए, टाइमस्टैम्प का उपयोग करना बेहतर है। लेकिन यदि आप चुनते हैं, तो आप टाइमस्टैम्प के बजाय अपने स्वयं के सम्मेलन का उपयोग कर सकते हैं। शायद उन्हें नाम दें 001_migration.rb, 002_migration.rb, आदि

आशा है कि मदद करता है।

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