ruby on rails - रेल माइग्रेशन का उपयोग कर कॉलम कैसे छोड़ें




ruby-on-rails database (10)

रेल माइग्रेशन के माध्यम से डेटाबेस तालिका कॉलम ड्रॉप करने के लिए वाक्यविन्यास क्या है?


Rails4 ऐप में कॉलम को हटाने के लिए भी परिवर्तन विधि का उपयोग करना संभव है। तीसरा पैराम डेटा_ टाइप है और वैकल्पिक रूप से आप विकल्प दे सकते हैं। यह दस्तावेज पर 'उपलब्ध परिवर्तन' खंड में थोड़ा छिपा हुआ है।

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end

ऐसा करने के दो अच्छे तरीके हैं:

remove_column

आप बस_c_column का उपयोग कर सकते हैं, जैसे:

remove_column :users, :first_name

यह ठीक है अगर आपको केवल अपनी स्कीमा में एक ही बदलाव करने की आवश्यकता है।

change_table ब्लॉक

आप इसे एक change_table ब्लॉक का उपयोग करके भी कर सकते हैं, जैसे:

change_table :users do |t|
  t.remove :first_name
end

मैं इसे पसंद करता हूं क्योंकि मुझे यह अधिक सुगम लगता है, और आप एक साथ कई बदलाव कर सकते हैं।

समर्थित परिवर्तन_टेबल विधियों की पूरी सूची यहां दी गई है:

http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table


कॉलम को निकालने के लिए माइग्रेशन उत्पन्न करें जैसे कि अगर यह मैगेटेड ( rake db:migrate ) है, तो उसे कॉलम ड्रॉप करना चाहिए। और यदि यह माइग्रेशन रोलबैक किया गया है तो इसे कॉलम वापस जोड़ना चाहिए ( rake db:rollback )।

वाक्यविन्यास:

remove_column: table_name,: column_name

कॉलम हटा देता है लेकिन रोलबैक पर कॉलम को वापस जोड़ने में विफल रहता है।

उदाहरण:

remove_column :users, :last_name

बहुवचन तालिका नाम नोट करें: उपयोगकर्ता

वाक्यविन्यास:

remove_column: table_name,: column_name,: टाइप करें

कॉलम को हटा देता है, अगर माइग्रेशन रोलबैक हो तो कॉलम वापस भी जोड़ता है।

उदाहरण:

remove_column :users, :last_name, :string

हैप्पी कोडिंग!


तालिका से कॉलम को केवल 3 चरणों में आसान तरीके से हटाने के लिए:

  1. यह आदेश लिखें

rails g migration remove_column_from_table_name

टर्मिनल में इस कमांड को चलाने के बाद इस नाम और टाइम स्टाम्प (remove_column from_table_name) द्वारा बनाई गई फ़ाइल।

फिर इस फाइल पर जाएं।

  1. फ़ाइल के अंदर आपको लिखना है

    remove_column :table_name, :column_name

  2. अंत में कंसोल पर जाएं और फिर करें

    rake db:migrate


नीचे दिया गया आदेश दें, यह माइग्रेशन फ़ाइल में स्वयं ही जोड़ देगा

rails g migration RemoveColumnFromModel

उपरोक्त आदेश चलाने के बाद आप माइग्रेशन फ़ाइल को हटा सकते हैं remove_column कोड अपने आप पर जोड़ा जाना चाहिए

फिर डीबी माइग्रेट करें

rake db:migrate

रेल 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

किसी डेटाबेस तालिका से कॉलम को हटाते समय परिवर्तन विधि का उपयोग न करें (उदाहरण के लिए कि आप रेल 3 ऐप्स में माइग्रेशन फ़ाइल में नहीं चाहते हैं):

  def change
    remove_column :table_name, :field_name
  end

जब आप remove_column की बात करते हैं तो रेल 3 में परिवर्तन विधि स्मार्ट नहीं होती है, इसलिए आप इस माइग्रेशन को रोलबैक करने में सक्षम नहीं होंगे।


रेल के पुराने संस्करणों के लिए

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

रेल 3 और ऊपर के लिए

rails generate migration RemoveFieldNameFromTableName field_name:datatype

change विधि में remove_column आपको तालिका से कॉलम हटाने में मदद करेगा।

class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end

पूर्ण संदर्भ के लिए इस लिंक पर जाएं: http://guides.rubyonrails.org/active_record_migrations.html


rails g migration RemoveXColumnFromY column_name:data_type

एक्स = कॉलम नाम
वाई = टेबल नाम

संपादित करें

टिप्पणियों के अनुसार RemoveXColumnToY को RemoveXColumnFromY - माइग्रेशन वास्तव में क्या कर रहा है इसके लिए अधिक स्पष्टता प्रदान करता है।


remove_column :table_name, :column_name

उदाहरण के लिए:

remove_column :users, :hobby

उपयोगकर्ता तालिका से शौक कॉलम हटा देगा।







rails-migrations