2011-08-26 17 views
38

रेल 2 में, इंडेक्स के साथ एक कॉलम को हटाएगा, रेलवे माइग्रेशन के साथ कॉलम को भी हटा देगा, कॉलम से जुड़े इंडेक्स को भी बदल देगा/हटा देगा? यदि नहीं, और इसके बजाय आपको प्रत्येक इंडेक्स को मैन्युअल रूप से बदलना/निकालना होगा, तो इसे स्वचालित रूप से स्वचालित नहीं किया जाना चाहिए?रेलवे माइग्रेशन कॉलम के साथ एक कॉलम को हटा देगा

(एक रेल नौसिखिया से)

+0

तरीका यहां तक ​​कोई रोचक पोस्ट जरूरी है कि सीधे मेरे सवाल फिर भी नहीं का जवाब करता है: http://keyj.wordpress.com/2009/05/28/remove-index-with-rails-migrations/ –

+4

अद्यतन: वर्तमान में, यह सूचकांक को हटा देता है (रेल 4.1.7)। MySQL 5.1 (कम से कम) के लिए –

उत्तर

24

धन्यवाद नहीं, दुर्भाग्य से आप अपना माइग्रेशन remove_index विधि का उपयोग कर के भीतर से मैन्युअल रूप से सूचकांक को दूर करने के लिए है।

+6

यह मामला प्रतीत नहीं होता है। देखें: http://stackoverflow.com/a/4341928/ – Tyler

+0

उस लिंक के लिए धन्यवाद @ टायलर –

+4

रेल 4 में यह अब करता है: http://stackoverflow.com/a/27622694/407213 (उदाहरण: मैंने कोशिश की और ' remove_column ... ',' remove_index ... '' इंडेक्स नाम '...' टेबल पर 'फेंकता है ...' 'मौजूद नहीं है "<3) – Dorian

5

एक प्रवास के अंदर स्पष्ट करने के लिए, वाक्य रचना एक 2 स्तंभ अनुक्रमणिका दूर करने के लिए है निम्नलिखित

remove_index :actions, :column => [:user_id,:action_name] 

या नाम से, देखने

remove_index :actions, :name => "index_actions_on_user_id_and_action_name" 
41

की मेरी बात से भी बदतर विकल्प रेल 4 से ऊपर, सूचकांक कॉलम हटाने के साथ स्वचालित रूप से हटा देता है।

5

बस सावधानी के रूप में, जबकि रेल 4 कॉलम को हटाते समय आपके लिए इंडेक्स को हटा दें, आपको कॉलम प्रकार निर्दिष्ट करना चाहिए। एक स्तंभ प्रकार के बिना, चल rake db:rollback

rake aborted! 
StandardError: An error has occurred, all later migrations canceled: 

remove_column is only reversible if given a type. 

मैं विदेशी कुंजी स्तंभों अनुक्रमित रहे थे छोड़ने के साथ प्रयोग किया गया था वापस आ जाएगी। परिवर्तन ब्लॉक में index: true निर्दिष्ट करने के लिए भी रोलबैक पर स्तंभों को उलटा नहीं लग रहा था।

0

रेल में> 3.2.16, कॉलम को हटाने से सूचकांक को हटा दिया जाता है।

0

यदि आप इंडेक्स को हटाना चाहते हैं तो आपको remove_index का उपयोग करना चाहिए, यदि आप remove_column का उपयोग करते हैं तो यह इंडेक्स को हटा देता है लेकिन आप रेक डीबी नहीं चला सकते हैं: रोलबैक। जिम के रूप में उल्लेख किया।

remove_column is only reversible if given a type. 
संबंधित मुद्दे