2012-02-15 12 views
95

मेरे रेल (3.2) ऐप में, मेरे डेटाबेस में टेबल का एक गुच्छा है लेकिन मैं कुछ नल बाधाओं को जोड़ना भूल गया। मैंने चारों ओर गुमराह किया है लेकिन मुझे नहीं पता कि माइग्रेशन कैसे लिखना है जो मौजूदा कॉलम को शून्य नहीं जोड़ता है।रेल पर रूबी: माइग्रेशन का उपयोग करके मौजूदा कॉलम में मैं नल बाधा कैसे जोड़ूं?

टीआईए।

उत्तर

78

change_column का प्रयास करें:

change_column :table_name, :column_name, :column_type, null: false 
+12

इस दृष्टिकोण से सावधान रहें - यदि आपके पास उस कॉलम के बारे में अन्य विशेषताएं थीं (उदाहरण के लिए ''सीमा' बाधा), तो आपको 'change_column' का उपयोग करते समय उन विशेषताओं को दोहराना होगा, या वे खो जाएंगे। इस कारण से, मैं 'change_column_null' –

+0

का उपयोग करना पसंद करता हूं ध्यान दें कि इससे 'अपरिवर्तनीय माइग्रेशन' उत्पन्न होता है जो कि आप जो चाहते हैं वह नहीं हो सकता है। –

+0

@NicNilov क्या आप उत्तर या नाथन वालेस की टिप्पणी के बारे में बात कर रहे हैं? – Mark

184

तुम भी change_column_null उपयोग कर सकते हैं:

change_column_null :table_name, :column_name, false 
+5

सबसे साफ जवाब! –

+1

मुझे इसे कॉलम के समूह के लिए बदलना पड़ा और इसके लिए प्रत्येक कॉलम के लिए कॉलम प्रकार निर्दिष्ट करने की आवश्यकता नहीं है, बहुत बेहतर! – Dorian

+3

रेल के लिए भी काम करता है 4+ – daniel

6

1) सबसे पहले:

2) तब डिफ़ॉल्ट मान के साथ स्तंभ जोड़ें: डिफ़ॉल्ट मान निकालें

add_column :orders, :items, :integer, null: false, default: 0 
change_column :orders, :items, :integer, default: nil 
+0

यह सही समाधान है जब आपको नया कॉलम जोड़ने की आवश्यकता होती है जो शून्य नहीं है, तो आपको पहले परिभाषित करना होगा कि इसका डिफ़ॉल्ट मान है क्योंकि SQLLite शिकायत करेगा (डिफ़ॉल्ट मान न्यूल के साथ न्यूल कॉलम नहीं जोड़ सकता है), और उसके बाद इसे हटा दें! – Mil4n

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