माइग्रेशन फ़ाइल बनाते समय डिफ़ॉल्ट मान असाइन करना


104
rails generate migration AddRetweetsCountToTweet retweets_count:integer 

ठीक है, मैं माइग्रेशन फ़ाइल बनाने के लिए उपरोक्त लाइन का उपयोग करता हूं जो स्वचालित रूप से डेटाटाइप पूर्णांक के साथ एक मॉडल ट्वीट में एक कॉलम जोड़ने के लिए उत्पन्न फ़ाइल में कोड उत्पन्न करता है। अब मैं माइग्रेशन फ़ाइल बनाते समय जोड़े गए कॉलम में डिफ़ॉल्ट मान जोड़ना चाहता हूं। क्या यह संभव है? मैंने इसे देखा, लेकिन ढूंढ नहीं पाया। दोस्तों को मदद की जरूरत है।


इस विषय पर RailsGuide देखें: guide.rubyonrails.org/migrations.html जो जानकारी आप खोज रहे हैं वह प्रवासन के पहले खंड एनाटॉमी में है
ऑस्टिन लिन

1
मुझे सही में पता है तुम्हारा क्या मतलब है। मैं एक डिफ़ॉल्ट मान भी सेट करने का प्रयास करता रहा, और यह जानकारी खोजने की कोशिश में एक दर्द की तरह था। बस नंगे SQL उत्पन्न करना आसान था, हालांकि तब संस्करण नियंत्रण में कोई माइग्रेशन नहीं है।
Tass

जवाबों:


166

डिफ़ॉल्ट माइग्रेशन जनरेटर डिफ़ॉल्ट मानों को संभालता नहीं है ( कॉलम संशोधक समर्थित हैं लेकिन इसमें शामिल नहीं हैं ) defaultया null, लेकिन आप अपना स्वयं का जनरेटर बना सकते हैं।

आप rake db:migrateविकल्पों को जोड़कर चलने से पहले माइग्रेशन फ़ाइल को मैन्युअल रूप से अपडेट कर सकते हैं add_column:

add_column :tweet, :retweets_count, :integer, :null => false, :default => 0

... और रेल एपीआई पढ़ें


9
ठीक है, जवाब के लिए धन्यवाद। मैंने सोचा कि यह बहुत अच्छा होगा यदि डिफ़ॉल्ट माइग्रेशन जनरेटर डिफ़ॉल्ट मानों को संभालने के लिए विकल्प प्रदान करेगा ताकि मुझे डिफ़ॉल्ट मान निर्दिष्ट करने के लिए उत्पन्न होने के बाद माइग्रेशन फ़ाइल को संपादित न करना पड़े।
kxhitiz


9

हां, मैं यह नहीं देख सका कि माइग्रेशन जनरेटर कमांड में 'डिफ़ॉल्ट' का उपयोग कैसे किया जाए, लेकिन "रेक डीबी: माइग्रेट" लागू करने से पहले उत्पन्न माइग्रेशन फ़ाइल में संशोधन करके एक नए स्ट्रिंग कॉलम के लिए डिफ़ॉल्ट मान निर्दिष्ट करने में सक्षम था:

class AddColumnToWidgets < ActiveRecord::Migration
  def change
    add_column :widgets, :colour, :string, default: 'red'
  end
end

यह मेरे 'विजेट' मॉडल में 'रंग' नामक एक नया कॉलम जोड़ता है और नए विजेट के डिफ़ॉल्ट 'रंग' को 'लाल' पर सेट करता है।


(यह रेल्स 4.2 में था।)
एमएससी

4

मैंने संपूर्ण तालिका बनाने के लिए माइग्रेशन फ़ाइल में t.boolean: active,: default => 1 आज़माया। उस माइग्रेशन को चलाने के बाद जब मैंने db में चेक किया तो वह अशक्त था। हालांकि मैंने डिफ़ॉल्ट को "1" के रूप में बताया। उसके बाद मैंने थोड़ा माइग्रेशन फ़ाइल इस तरह से बदल दिया, फिर यह मेरे लिए टेबल माइग्रेशन फ़ाइल बनाने पर डिफ़ॉल्ट मान सेट करने के लिए काम किया।

t.boolean: active,: null => false,: default => 1। मेरे लिए काम किया।

मेरा रेल ढांचा संस्करण 4.0.0 है



2

आपको पहले मॉडल बेसिक्स के लिए अपना माइग्रेशन बनाना होगा फिर आप change_column का उपयोग करके अपने पिछले को संशोधित करने के लिए एक और माइग्रेशन बनाएँ ...

def change
    change_column :widgets, :colour, :string, default: 'red'
end
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.