दिलचस्प पोस्ट
कैसे PHP को प्रत्येक उपयोगकर्ता के लिए स्वचालित रूप से उपडोमेन बनाना है? Sass के साथ अंत में अभिभावक चयनकर्ता को जोड़ना अतिव्यापी बिना आयताकारों के एक सेट को कवर करने के लिए सबसे कम आयत खोजने के लिए एल्गोरिथ्म मैं कैसे बताऊँगा कि क्या नियमित फाइल बाश में मौजूद नहीं है? स्मार्ट पॉइंटर क्या है और मुझे कब उपयोग करना चाहिए? इवेंटलिस्टनर सूची फायरिंग आदेश JasperException: useBean वर्ग विशेषता के लिए मान अमान्य है MySQL AUTO_INCREMENT रोलबैक नहीं करता है टेम्पलेट स्पेशलाइजेशन वीएस फ़ंक्शन ओवरलोडिंग कैसे @ सिंक्रनाइज़ लॉक / अनलॉक में उद्देश्य सी? एक सामान्य शब्दकोश के मूल्य की कुंजी हो रही है? फ्लास्क में एक एसक्यूएललेमी परिणाम सेट करें आयात स्टेटमेंट में परिवर्तन python3 एडीबी शैल इनपुट इवेंट्स एसएसएल प्रमाणपत्र कैसे सत्यापित किए जाते हैं?

Rails माइग्रेशन पर रूबी में डेटाबेस कॉलम का नाम कैसे बदल सकता हूँ?

मैंने hased_password बजाय गलत कॉलम hased_password नाम दिया है।

मैं इस स्तंभ का नाम बदलने के लिए माइग्रेशन का उपयोग कर डेटाबेस स्कीमा को कैसे अपडेट कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "Rails माइग्रेशन पर रूबी में डेटाबेस कॉलम का नाम कैसे बदल सकता हूँ?"

 rename_column :table, :old_column, :new_column 

अद्यतन करें:

आप ऐसा करने के लिए शायद एक अलग प्रवास बनाना चाहते हैं। (आप के रूप में फ़िक्स कॉलमनाम का नाम बदलें)

 script/generate migration FixColumnName # creates db/migrate/xxxxxxxxxx_fix_column_name.rb 

फिर अपनी इच्छानुसार कार्य करने के लिए माइग्रेशन संपादित करें

 # db/migrate/xxxxxxxxxx_fix_column_name.rb class FixColumnName < ActiveRecord::Migration def self.up rename_column :table_name, :old_column, :new_column end def self.down # rename back if you need or do something else or do nothing end end 

रेल 3.1 के लिए एक अपडेट

हालांकि, up और down तरीकों अभी भी लागू होते हैं। रेल 3.1 को एक change विधि प्राप्त होती है जो "आपके डेटाबेस को माइग्रेट करने के तरीके को जानता है और जब इसे अलग-अलग विधि लिखने की आवश्यकता के बिना माइग्रेशन वापस लाया जाता है"

 rails g migration FixColumnName class FixColumnName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end 

यदि आपके पास नाम बदलने के लिए कॉलम का एक पूरा समूह हो, या ऐसा कुछ जिसके लिए तालिका नाम दोबारा दोबारा आवृत करना होगा

 rename_column :table_name, :old_column1, :new_column1 rename_column :table_name, :old_column2, :new_column2 ... 

आप चीजों को थोड़ा सा व्यवस्थित रखने के लिए change_table का उपयोग कर सकते हैं

 class FixColumnNames < ActiveRecord::Migration def change change_table :table_name do |t| t.rename :old_column1, :new_column1 t.rename :old_column2, :new_column2 ... end end end 

धन्यवाद विषय, विषय को लाने के लिए, Luke Turadg

तो बस db:migrate सामान्य रूप से db:migrate या फिर आप अपने व्यवसाय के बारे में जाते हैं।


रेल 4 के लिए एक अपडेट

कॉलम का नाम बदलने के लिए Migration बनाने के दौरान, रेल 4 ने उपरोक्त उत्तर में वर्णित up और down बजाय एक change विधि उत्पन्न की है। उत्पन्न change विधि निम्नानुसार है:

 $ > rails g migration ChangeColumnName 

जो इस तरह के माइग्रेशन फ़ाइल बनाएगा:

 class ChangeColumnName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end 

आईएमओ, इस मामले में बेहतर rake db:rollback उपयोग करें rake db:rollback फिर अपना माइग्रेशन संपादित करें और फिर टाइप करें rake db:migrate । हालांकि, यदि आपके पास कॉलम में डेटा है जो आप खोना नहीं चाहते हैं, तो rename_column उपयोग rename_column

http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

Available Transformations तहत

rename_column(table_name, column_name, new_column_name):

एक स्तंभ का नाम बदलता है, लेकिन प्रकार और सामग्री को रखता है।

अगर कॉलम पहले से ही डेटा के साथ पॉपुलेट हो चुका है और उत्पादन में रहता है, तो मैं कदम से एक कदम की सिफारिश करता हूं, ताकि माइग्रेशन के लिए इंतजार करते समय उत्पादन में डाउनटाइम से बचें।

सबसे पहले मैं नए नाम (नामों) के साथ कॉलम जोड़ने के लिए डीबी माइग्रेशन बना रहा था और उन्हें पुराने कॉलम नाम से मानों के साथ पॉप्युलेट किया था।

 class AddCorrectColumnNames < ActiveRecord::Migration def up add_column :table, :correct_name_column_one, :string add_column :table, :correct_name_column_two, :string puts 'Updating correctly named columns' execute "UPDATE table_name SET correct_name_column_one = old_name_column_one, correct_name_column_two = old_name_column_two" end end def down remove_column :table, :correct_name_column_one remove_column :table, :correct_name_column_two end end 

फिर मैं उस बदलाव को बदलूंगा, और परिवर्तन को उत्पादन में डालूंगा।

 git commit -m 'adding columns with correct name' 

फिर एक बार प्रतिबद्धता को उत्पादन में धकेल दिया गया, तो मैं चला जाऊंगा।

 Production $ bundle exec rake db:migrate 

फिर मैं उन सभी विचारों / नियंत्रकों को अपडेट करूँगा जो पुराने कॉलम नाम को नए कॉलम के नाम पर संदर्भित करते हैं। मेरे परीक्षण सूट के माध्यम से चलाएं, और उन परिवर्तनों को कम करें। (यह सुनिश्चित करने के बाद कि यह स्थानीय तौर पर काम कर रहा था और पहले सभी परीक्षणों को पारित कर रहा था!)

 git commit -m 'using correct column name instead of old stinky bad column name' 

फिर मैं उस उत्पादन को कमाने के लिए धक्का दूंगा।

इस बिंदु पर आप माइग्रेशन से संबंधित किसी भी प्रकार के डाउनटाइम के बारे में चिंता किए बिना मूल कॉलम को निकाल सकते हैं

 class RemoveBadColumnNames < ActiveRecord::Migration def up remove_column :table, :old_name_column_one remove_column :table, :old_name_column_two end def down add_column :table, :old_name_column_one, :string add_column :table, :old_name_column_two, :string end end 

फिर इस नवीनतम माइग्रेशन को उत्पादन के लिए धक्का दें और bundle exec rake db:migrate चलाएं bundle exec rake db:migrate पृष्ठभूमि में bundle exec rake db:migrate

मुझे एहसास है कि यह एक प्रक्रिया से थोड़ा अधिक सम्मिलित है, लेकिन मैं इसे अपने उत्पादन प्रवासन के साथ समस्याओं के मुकाबले करना चाहता हूं

माइग्रेशन फ़ाइल बनाने के लिए निम्न कमांड चलाएं:

 rails g migration ChangeHasedPasswordToHashedPassword 

फिर फाइल में db/migrate फ़ोल्डर में, rename_column लिखें:

 class ChangeOldCoulmnToNewColumn < ActiveRecord::Migration def change rename_column :table_name, :hased_password, :hashed_password end end 

एपीआई से:

 rename_column(table_name, column_name, new_column_name) 

यह एक कॉलम का नाम बदलता है, लेकिन प्रकार और सामग्री बना रहता है।

पटरियों पर रूबी के कुछ संस्करणों को माइग्रेशन के लिए अप / डाउन विधि का समर्थन और यदि आपके पास माइग्रेशन में अप / डाउन विधि है, तो:

 def up rename_column :table_name, :column_old_name, :column_new_name end def down rename_column :table_name, :column_new_name, :column_old_name end 

यदि आपके पास माइग्रेशन में change विधि है, तो:

 def change rename_column :table_name, :column_old_name, :column_new_name end 

अधिक जानकारी के लिए आप स्थानांतरित कर सकते हैं: रेल पर रूबी – माइग्रेशन या सक्रिय रिकॉर्ड माइग्रेशन

यदि आपका कोड दूसरे के साथ साझा नहीं किया गया है, तो सबसे अच्छा विकल्प सिर्फ rake db:rollback फिर माइग्रेशन और rake db:migrate में अपना कॉलम नाम संपादित करें rake db:migrate बस

और आप स्तंभ का नाम बदलने के लिए एक और प्रवास लिख सकते हैं

  def change rename_column :table_name, :old_name, :new_name end 

बस।

यदि आपको कॉलम के नामों को स्विच करना है, तो आपको डुप्लिकेट कॉलम नाम त्रुटि से बचने के लिए प्लेसहोल्डर बनाने की आवश्यकता होगी। यहां एक उदाहरण है:

 class SwitchColumns < ActiveRecord::Migration def change rename_column :column_name, :x, :holder rename_column :column_name, :y, :x rename_column :column_name, :holder, :y end end 

वैकल्पिक विकल्प के रूप में, यदि आप माइग्रेशन के विचार से विवाह नहीं करते हैं, तो ActiveRecord के लिए एक आकर्षक मणि है जो नाम आपके लिए स्वचालित रूप से बदल देगा, डेटामैपर शैली आप सब करते हैं अपने मॉडल में कॉलम नाम बदलते हैं (और सुनिश्चित करें कि आपने Model.auto_upgrade! अपने model.rb के नीचे!) और वायलो डाल दिया! डेटाबेस उड़ान भरने पर अपडेट किया गया है।

https://github.com/DAddYE/mini_record

नोट: संघर्ष को रोकने के लिए आपको Nuke Db / schema.rb की आवश्यकता होगी

फिर भी बीटा चरणों में और स्पष्ट रूप से सभी के लिए नहीं, लेकिन अभी भी एक सम्मोहक विकल्प (मैं वर्तमान में इसे दो गैर-क्षुद्र उत्पादन क्षुधा में उपयोग नहीं कर रहा हूं)

बस एक नया माइग्रेशन बनाएं, और एक ब्लॉक में, नीचे के रूप में rename_column उपयोग करें।

 rename_column :your_table_name, :hased_password, :hashed_password 

रेल के लिए रूबी के लिए 4:

 def change rename_column :table_name, :column_name_old, :column_name_new end 

यदि वर्तमान डेटा आपके लिए महत्वपूर्ण नहीं है, तो आप बस अपना मूल माइग्रेशन नीचे ले जा सकते हैं:

 rake db:migrate:down VERSION='YOUR MIGRATION FILE VERSION HERE' 

उद्धरण चिह्नों के बिना, फिर मूल प्रवास में परिवर्तन करें और फिर से ऊपर प्रवासन को चलाएं:

 rake db:migrate 

मैन्युअल रूप से हम नीचे विधि का उपयोग कर सकते हैं:

हम माइग्रेशन को मैन्युअल रूप से संपादित कर सकते हैं:

  • app/db/migrate/xxxxxxxxx_migration_file.rb खोलें app/db/migrate/xxxxxxxxx_migration_file.rb

  • hased_password को hashed_password

  • नीचे दिए गए आदेश को चलाएं

     $> rake db:migrate:down VERSION=xxxxxxxxx 

फिर यह आपके माइग्रेशन को निकाल देगा:

 $> rake db:migrate:up VERSION=xxxxxxxxx 

यह अद्यतित परिवर्तन के साथ आपके प्रवास को जोड़ देगा।

भागो rails g migration ChangesNameInUsers (या जो भी आप इसे नाम देना चाहते हैं)

माइग्रेशन फ़ाइल खोलें जो अभी तैयार की गई है, और इस लाइन को विधि में जोड़ें ( def change और end बीच):

rename_column :table_name, :the_name_you_want_to_change, :the_new_name

फ़ाइल को सहेजें, और rake db:migrate चलाएं rake db:migrate कंसोल में rake db:migrate करें

यह देखने के लिए कि क्या नाम वास्तव में डेटाबेस में बदल गया है, अपने schema.dbschema.db को देखें।

उम्मीद है की यह मदद करेगा 🙂

माइग्रेशन फ़ाइल जनरेट करें:

 rails g migration FixName 

# डीबी / माइग्रेट / xxxxxxxxxx.rb बनाता है

आपकी इच्छानुसार करने के लिए माइग्रेशन संपादित करें

 class FixName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end 

रेल माइग्रेशन पर रूबी उत्पन्न करें :

 $:> rails g migration Fixcolumnname 

माइग्रेशन फ़ाइल में कोड डालें (XXXXXfixcolumnname.rb) :

 class Fixcolumnname < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end 
 $: rails g migration RenameHashedPasswordColumn invoke active_record create db/migrate/20160323054656_rename_hashed_password_column.rb 

वह माइग्रेशन फ़ाइल खोलें और उस फ़ाइल को नीचे के रूप में संशोधित करें (अपने मूल table_name दर्ज करें)

 class RenameHashedPasswordColumn < ActiveRecord::Migration def change rename_column :table_name, :hased_password, :hashed_password end end 

अपने रूबी को रेल कंसोल पर खोलें और दर्ज करें:

 ActiveRecord::Migration.rename_column :tablename, :old_column, :new_column 

आपके पास यह करने के दो तरीके हैं:

  1. इस प्रकार में यह स्वचालित रूप से इसके रिवर्स कोड को चलाता है, जब रोलबैक होता है।

     def change rename_column :table_name, :old_column_name, :new_column_name end 
  2. इस प्रकार के लिए, यह ऊपर की विधि चलाता है जब rake db:migrate और डाउन विधि को चलाता है जब rake db:rollback :

     def self.up rename_column :table_name, :old_column_name, :new_column_name end def self.down rename_column :table_name,:new_column_name,:old_column_name end 
  def change rename_column :table_name, :old_column_name, :new_column_name end 

बस कमांड का प्रयोग करके माइग्रेशन बनाएं

 rails g migration rename_hased_password 

उसके बाद माइग्रेशन परिवर्तन विधि में निम्नलिखित पंक्ति को जोड़ते हैं

 rename_column :table, :hased_password, :hashed_password 

यह काम कर जाना चाहिए।

अद्यतन – create_table का एक करीबी चचेरा भाला change_table है, जिसका प्रयोग मौजूदा टेबल बदलने के लिए किया गया है। इसे बनाने के लिए इसी तरह की विधि में प्रयोग किया जाता है- लेकिन ब्लॉक से जुड़ी वस्तु अधिक गुटों को जानती है। उदाहरण के लिए:

 class ChangeBadColumnNames < ActiveRecord::Migration def change change_table :your_table_name do |t| t.rename :old_column_name, :new_column_name end end end 

यह तरीका अधिक कुशल है अगर हम अन्य परिवर्तन विधियों जैसे कि: सूचकांक निकालें / जोड़ / सूचकांक को निकालें / जोड़ें कॉलम, जैसे हम आगे की तरह कर सकते हैं:

 # Rename t.rename :old_column_name, :new_column_name # Add column t.string :new_column # Remove column t.remove :removing_column # Index column t.index :indexing_column #...