जवाबों:
remove_column :table_name, :column_name
उदाहरण के लिए:
remove_column :users, :hobby
उपयोगकर्ता तालिका से शौक कॉलम को हटा देगा।
remove_column :table_name, :column_name, :type, :options
भीतर भी उपयोग कर सकते हैं change
, यदि आप निर्दिष्ट करते हैं कि माइग्रेशन को फिर से टाइप करना संभव है। प्रलेखन से: और मानकों मौजूद होने पर ध्यान नहीं दिया जाएगा। यह एक माइग्रेशन विधि में प्रदान करने के लिए सहायक हो सकता है ताकि इसे वापस लाया जा सके। उस स्थिति में, और add_column द्वारा उपयोग किया जाएगा। type
options
change
type
options
change
विधि में निकाल सकते हैं , लेकिन केवल यदि आप स्तंभ प्रकार निर्दिष्ट करते हैं। जैसे remove_column, :table_name, :column_name, :column_type
। अन्यथा आप माइग्रेशन को चलाने का प्रयास करते समय निम्न त्रुटि प्राप्त करेंगे:remove_column is only reversible if given a type
रेल के पुराने संस्करणों के लिए
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
रेल 3 और ऊपर के लिए
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
यह भी काम करता है
AddXXXtoTTT
एक RemoveXXXFromTTT
filed_name की एक सफेद रिक्ति सूची के द्वारा पीछा किया जा सकता है: DATA_TYPE, और उचित add_column और remove_column बयान बनाया जाएगा: rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
एक भी पलायन का उपयोग कर दो विशेषताओं को हटा। यह भी ध्यान दें कि remove_column
द्वारा समर्थित नहीं है change
विधि है, तो आप दोनों लिखने के लिए है up
और down
।
change
। रोलबैक उसी तरह काम करता है जैसे उसे करना चाहिए।
change
विधि का उपयोग कर रहे हैं जो कि वापस हो सकती है * तो आपको डेटा प्रकार (और अन्य सभी फ़ील्ड संशोधक) को सूचित करने की आवश्यकता होगी, इसलिए यदि आप उस माइग्रेशन को रोलबैक करते हैं, तो फ़ील्ड को सही तरीके से फिर से बनाया जा सकता है। * जब मैं कहता हूं कि यह उल्टा है, तो डेटाबेस संरचना के संदर्भ में, निश्चित रूप से, उस कॉलम का डेटा स्पष्ट रूप से खो जाएगा।
रेल 4 को अपडेट किया गया है, इसलिए किसी कॉलम को छोड़ने के लिए माइग्रेशन में परिवर्तन विधि का उपयोग किया जा सकता है और माइग्रेशन सफलतापूर्वक रोलबैक हो जाएगा। कृपया रेल 3 एप्लिकेशन के लिए निम्नलिखित चेतावनी पढ़ें:
रेल 3 चेतावनी
कृपया ध्यान दें कि जब आप इस कमांड का उपयोग करते हैं:
rails generate migration RemoveFieldNameFromTableName field_name:datatype
उत्पन्न माइग्रेशन कुछ इस तरह दिखाई देगा:
def up
remove_column :table_name, :field_name
end
def down
add_column :table_name, :field_name, :datatype
end
डेटाबेस तालिका से कॉलम हटाते समय परिवर्तन पद्धति का उपयोग न करें (उदाहरण के लिए रेल एप्लिकेशन में माइग्रेशन फ़ाइल में जो आप नहीं चाहते हैं):
def change
remove_column :table_name, :field_name
end
जब यह हटाने के लिए आता है, तो रेल 3 में परिवर्तन विधि स्मार्ट नहीं है, इसलिए आप इस माइग्रेशन को रोलबैक नहीं कर पाएंगे।
change
विधि का उपयोग करते हैं , तो rake db:rollback
कमांड त्रुटि करेगा। rake db:rollback
मूल रूप से इसके विपरीत है rake db:migrate
। यह बग रेल 4 :)
Rails4 ऐप में कॉलम को हटाने के लिए परिवर्तन विधि का उपयोग करना संभव है। तीसरा परम डेटा_टाइप है और वैकल्पिक में आप विकल्प दे सकते हैं। यह डॉक्यूमेंटेशन के सेक्शन 'उपलब्ध ट्रांसफॉर्मेशन' में थोड़ा छिपा हुआ है ।
class RemoveFieldFromTableName < ActiveRecord::Migration
def change
remove_column :table_name, :field_name, :data_type, {}
end
end
ऐसा करने के दो अच्छे तरीके हैं:
आप बस remove_column का उपयोग कर सकते हैं, जैसे:
remove_column :users, :first_name
यह ठीक है अगर आपको केवल अपने स्कीमा में एक ही बदलाव करने की आवश्यकता है।
आप change_table block का उपयोग करके भी ऐसा कर सकते हैं, जैसे:
change_table :users do |t|
t.remove :first_name
end
मुझे यह पसंद है क्योंकि मुझे यह अधिक सुपाच्य लगता है, और आप एक साथ कई बदलाव कर सकते हैं।
यहां समर्थित चेंज_टेबिल तरीकों की पूरी सूची दी गई है:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
रेल में 5 आप टर्मिनल में इस कमांड का उपयोग कर सकते हैं:
rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE
उदाहरण के लिए टेबल उपयोगकर्ताओं से कॉलम access_level (स्ट्रिंग) को हटाने के लिए:
rails generate migration remove_access_level_from_users access_level:string
और फिर चलाएं:
rake db:migrate
किसी स्तंभ को निकालने के लिए माइग्रेशन उत्पन्न करें जैसे कि यदि वह माइग्रेट ( rake db:migrate
) है, तो उसे कॉलम को छोड़ देना चाहिए । और यह कॉलम वापस जोड़ना चाहिए यदि यह माइग्रेशन रोलबैक किया गया है ( rake db:rollback
)।
वाक्य रचना:
remove_column: table_name,: column_name, टाइप करें
यदि स्तंभ रोलबैक किया गया है, तो स्तंभ को निकालता है, स्तंभ को भी जोड़ता है।
उदाहरण:
remove_column :users, :last_name, :string
नोट : यदि आप data_type को छोड़ते हैं , तो माइग्रेशन कॉलम को सफलतापूर्वक हटा देगा लेकिन यदि आप माइग्रेशन को रोलबैक करते हैं तो यह एक एरर फेंक देगा।
अपने टर्मिनल में निम्न कमांड चलाएँ :
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
नोट: टेबल नाम रेल कन्वेंशन के अनुसार बहुवचन रूप में होना चाहिए।
उदाहरण:
मेरे मामले में मैं तालिका accepted
से स्तंभ (बूलियन मान) निकालना चाहता हूं quotes
:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
प्रलेखन को फिर से देखें : एक सम्मलेन जब एक तालिका में फ़ील्ड्स जोड़ते / हटाते हैं:
एक तालिका में फ़ील्ड्स जोड़ने के लिए माइग्रेशन उत्पन्न करने के लिए एक विशेष वाक्यात्मक शॉर्टकट है।
रेल से माइग्रेशन add_fieldname_to_tablename फ़ील्ड नाम: फ़ील्डटाइप उत्पन्न होता है
# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
# with rails 5.2 you don't need to add a separate "up" and "down" method.
def change
remove_column :quotes, :accepted, :boolean
end
end
rake db:migrate
.... और फिर आप दौड़ से बाहर हो गए!
rails db:migrate
5 एप्लिकेशन के लिए कॉलम निकालें
rails g migration Remove<Anything>From<TableName> [columnName:type]
ऊपर दिए गए कमांड db/migrate
निर्देशिका के अंदर एक माइग्रेशन फ़ाइल उत्पन्न करते हैं । स्निपेट झटका रेल जनरेटर द्वारा उत्पन्न तालिका उदाहरण से हटाए गए कॉलम में से एक है,
class RemoveAgeFromUsers < ActiveRecord::Migration
def up
remove_column :users, :age
end
def down
add_column :users, :age, :integer
end
end
मैंने रेल के लिए एक त्वरित संदर्भ मार्गदर्शिका भी बनाई, जो यहां मिल सकती है ।
rails g migration RemoveXColumnFromY column_name:data_type
X = कॉलम नाम
Y = तालिका नाम
संपादित करें
बदल दिया RemoveXColumnToY
करने के लिए RemoveXColumnFromY
टिप्पणियों के अनुसार - क्या प्रवास वास्तव में क्या कर रहा है के लिए और अधिक स्पष्टता प्रदान करता है।
remove_column
में change
विधि आप मेज से कॉलम हटाने में मदद मिलेगी।
class RemoveColumn < ActiveRecord::Migration
def change
remove_column :table_name, :column_name, :data_type
end
end
पूर्ण संदर्भ के लिए इस लिंक पर जाएं: http://guides.rubyonrails.org/active_record_migrations.html
निम्नानुसार केवल 3 चरणों में तालिका से स्तंभ हटाने के लिए:
rails g migration remove_column_from_table_name
इस नाम और टाइम स्टैम्प द्वारा बनाई गई टर्मिनल एक फाइल में इस कमांड को चलाने के बाद (remove_column from_table_name)।
फिर इस फाइल पर जाएं।
फाइल के अंदर आपको लिखना है
remove_column :table_name, :column_name
अंत में कंसोल पर जाएं और फिर करें
rake db:migrate
रेल कंसोल से एक और अधिक
ActiveRecord::Migration.remove_column(:table_name, :column_name)
remove_column :table_name, :column_name
एक माइग्रेशन फ़ाइल के माध्यम से
आप टाइप करके सीधे रेल कंसोल में एक कॉलम हटा सकते हैं:
ActiveRecord::Base.remove_column :table_name, :column_name
इसे अवश्य पसंद करें;
rails g migration RemoveColumnNameFromTables column_name:type
अर्थात rails g migration RemoveTitleFromPosts title:string
वैसे भी, रनटाइम के दौरान डाउनटाइम के साथ-साथ ActiveRecord कैश डेटाबेस कॉलम के बारे में विचार करना बेहतर होगा, ताकि यदि आप कोई कॉलम ड्रॉप करते हैं, तो यह आपके ऐप के रिबूट होने तक अपवाद हो सकता है।
रेफरी: मजबूत प्रवास
बस, आप कॉलम हटा सकते हैं
remove_column :table_name, :column_name
उदाहरण के लिए,
remove_column :posts, :comment
up
औरdown
तरीकों से सुनिश्चित करें , न किchange
, जैसा कि @Powers द्वारा उत्तर में समझाया गया है।