Ruby on Rails miqrasiyaində verilənlər bazası sütununu necə dəyişə bilərəm?

hased_password yerinə hased_password sütunu adlandırdım.

Bu sütunu yenidən adlandırmaq üçün köçdən istifadə edərək verilənlər bazası sxemini necə yeniləyə bilərəm?

1339
02 янв. 02 yanvar tarixində user1994764 tərəfindən təyin olundu 2010-01-02 19:18 '10 saat 19:18 'da 2010-01-02 19:18
@ 27 cavab
 rename_column :table, :old_column, :new_column 

Yeniləmə:

Bunun üçün ayrı bir transfer yaratmaq isteyebilirsiniz. (Adınızın FixColumnName adını yenidən adlandırın)

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

Daha sonra iradənizi etmək üçün transferləri redaktə edin.

 # 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 

Rails üçün yeniləmə 3.1

updown üsullardan istifadə olunur. Rails 3.1, "verilənlər bazasını necə hərəkət etdirdiyini və köçürmə ayrı bir metod yazmaqdan geri döndüyü zaman ləğv edildiyini bilən change metodunu alır "

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

Bir neçə sütun və ya masa adını bir daha təkrarlamaq tələb edəcəyi bir şeyin adını dəyişmək lazımdır.

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

Siz dəyişiklikləri bir az change_table üçün change_table istifadə edə bilərsiniz.

 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 

Təşəkkür, Luke Turadg , mövzunu yenidən yaratmaq üçün.

Sonra db:migrate adətən db:migrate , ya da işinizi edirsiniz.


Rails üçün yeniləmə 4

Bir sütunun adını dəyişmək üçün bir Migration yaratdıqda, Rails 4 yuxarıdakı cavabda göstərildiyi kimi updown əvəzinə bir change üsulu yaradır. Yaradılmış change üsulu belədir:

 $ > rails g migration ChangeColumnName 

buna bənzər bir miqrasiya fakturası yaradacaq:

 class ChangeColumnName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end 
2152
02 янв. Cavab verilmişdir 02 Yanvar 2010-01-02 19:31 '10 at 19:31 'da 2010-01-02 19:31

IMO, bu halda rake db:rollback istifadə etmək daha yaxşıdır. Sonra köçürməni düzəldin və rake db:migrate daxil edin rake db:migrate yenidən rake db:migrate edin. Lakin, itirmək istəməyən bir sütundakı məlumatlarınız varsa, rename_column istifadə rename_column .

border=0
67
03 янв. cavab elf.xf verildi 03 yanvar. 2010-01-03 03:55 '10 at 3:55 2010-01-03 03:55

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

Available Transformations bölməsində

rename_column(table_name, column_name, new_column_name):

Bir sütunu yenidən adlandırır, lakin növü və məzmununu saxlayır.

26
02 янв. James Manning tərəfindən verilmiş cavab Jan 02 2010-01-02 19:26 '10 at 19:26 'da 2010-01-02 19:26

Sütun artıq istehsal prosesində məlumat və həyat ilə dolu olsaydı, köçməyi gözləyən istehsal dayanımından qaçınmaq üçün mərhələli bir yanaşma təklif edərdim.

Birincisi, yeni bir ad ilə sütunlar əlavə etmək və onları köhnə sütun adından dəyərlərlə doldurmaq üçün db köçürməsini yaratdım.

 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 

Daha sonra bu dəyişikliyi edəcəyəm və onu istehsalına sürükləyəcəyəm.

 git commit -m 'adding columns with correct name' 

Daha sonra tövsiyə istehsala çıxarılacaq kimi başladım.

 Production $ bundle exec rake db:migrate 

Sonra köhnə sütun adını yeni sütun adına istinadən bütün baxışları / nəzarətçiləri yeniləmişəm. Mənim test vəziyyətimə baş çəkin və yalnız bu dəyişiklikləri kopyalayın. (Yerli işləyir və bütün testləri keçərdən əmin olun!)

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

Sonra bu düzəlişin istehsalına basacağam.

Bu nöqtədə, köçün özü ilə əlaqəli hər hansı bir qüsuru narahat etmədən orijinal sütunu silə bilərsiniz.

 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 

Daha sonra bu son istehsalın köçünü basın və bundle exec rake db:migrate -ı çalıştırın bundle exec rake db:migrate arka planda keçin.

Mən başa düşürəm ki, bu proseslə bir az daha çox məşğul olur, amma bu mənim istehsal məcburiyyəti ilə bağlı problemlərdən daha üstündür.

24
31 авг. Pol Pettengill tərəfindən verilmiş cavab 31 avqust 2013-08-31 01:08 '13 at 1:08 2013-08-31 01:08

Bir miqrasiya faylı yaratmaq üçün aşağıdakı əmrləri yerinə yetirin:

 rails g migration ChangeHasedPasswordToHashedPassword 

Sonra db/migrate rename_column qovluğunda yaradılan faylda, rename_column ə aşağıdakı kimi rename_column :

 class ChangeOldCoulmnToNewColumn < ActiveRecord::Migration def change rename_column :table_name, :hased_password, :hashed_password end end 
16
03 дек. Şoaib Malik tərəfindən verilmiş cavab 03 Dek 2014-12-03 14:45 '14 14:45 'də 2014-12-03 14:45

API-dən:

 rename_column(table_name, column_name, new_column_name) 

Sütunu yenidən adlandırır, lakin növü və məzmununu eyni saxlayır.

13
18 февр. Cavab 18 fevral tarixində super_p tərəfindən verilir . 2011-02-18 14:15 '11 saat 02:15 'da 2011-02-18 14:15

Ruby on Rails-in bəzi versiyaları köç üçün yuxarı / aşağı üsulu dəstəkləyir və köçənizdə yuxarı / aşağı üsul varsa, onda:

 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 

Göçünüzdə change üsulunuz varsa, onda:

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

Daha çox məlumat üçün naviqasiya edə bilərsiniz: Ruby on Rails - Migrations və ya Active Record Migrations .

12
14 февр. cavab 14 umabya verilir . 2014-02-14 13:38 '14 da 13:38 2014-02-14 13:38

Kodunuz başqa bir şəkildə paylaşılmırsa, ən yaxşı seçim rake db:rollback sonra köç əməliyyatları zamanı sütun adını dəyişdirmək və rake db:rollback etməkdir. Təşəkkür edirəm

Sütunu yenidən adlandırmaq üçün başqa bir köçürmə yaza bilərsiniz

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

İşdə.

10
04 дек. cavab günəş 04 dekabr verilir . 2013-12-04 17:34 '13 'da 17:34' də 2013-12-04 17:34

Sütun adlarını dəyişdirmək lazımdırsa, cüt sütun adı ilə bir səhvdən qaçınmaq üçün bir yer tutucu yaratmalısınız. Burada bir nümunə:

 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 
8
10 сент. Abram tərəfindən verilmiş cavab 10 sentyabr 2013-09-10 00:10 '13 'da 0:10' da 2013-09-10 00:10

Alternativ olaraq, əgər siz köçün ideyası ilə evlənməssinizsə, ActiveRecord üçün avtomatik olaraq ad dəyişiklikləri, Datamapper stilini idarə edəcək bir qarşısıalınmaz daş var. Yapmanız gereken tek şey, modelinizdeki sütun adını dəyişdirməkdir (və model.auto_upgrade qoyduğunuzdan əmin olun ! Model.rb altındakı) və viola! Verilənlər bazası tezliklə yenilənir.

https://github.com/DAddYE/mini_record

Qeyd Çatışmaları önləmək üçün nub db / schema.rb istifadə etməlisiniz

Hələ də beta mərhələsində və açıq-aydın hər kəs üçün deyil, hələ də cəlbedici bir seçimdir (hal-hazırda bu problemsiz iki qeyri-trivial istehsal tətbiqində istifadə edirəm)

7
30 янв. 30 yanvarda Steven Garcia tərəfindən cavab verildi 2012-01-30 23:00 '12 saat 23:00 'də 2012-01-30 23:00' də

Məlumat sizin üçün vacib deyilsə, sadəcə istifadə edərək köçürməni silə bilərsiniz:

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

Qiymətlər olmadan, orijinal miqrasiya üçün dəyişikliklər edin və yenidən köç edin:

 rake db:migrate 
7
26 июля '13 в 12:11 2013-07-26 12:11 cavab 26 iyul 'da 12:11' də verildi. 2013-07-26 12:11

Yeni bir köç yaratmaq və rename_column istifadə aşağıda göstərildiyi kimi istifadə edin.

 rename_column :your_table_name, :hased_password, :hashed_password 
6
24 марта '14 в 18:05 2014-03-24 18:05 cavab 24 mart '18' də 18:05 'də can qarla verilir. 2014-03-24 18:05

Ruby on Rails 4:

 def change rename_column :table_name, :column_name_old, :column_name_new end 
6
20 янв. Hardik Hardyan tərəfindən verilmiş cavab Jan 20 2015-01-20 17:44 '15 'da 17:44' də, 2015-01-20 17:44

Manuel rejimdə aşağıdakı metoddan istifadə edə bilərik:

Miqarı əl ilə düzəldə bilərsiniz, məsələn:

  • Open app/db/migrate/xxxxxxxxx_migration_file.rb

  • hased_password hashed_password

  • Aşağıdakı əmri çalıştırın

     $> rake db:migrate:down VERSION=xxxxxxxxx 

Sonra köçməni silir:

 $> rake db:migrate:up VERSION=xxxxxxxxx 

Yenilənmiş dəyişikliklə köçməni əlavə edəcək.

5
14 июля '14 в 16:58 2014-07-14 16:58 cavab 14 iyul 14: 14-də Sumit Munot tərəfindən verilir. 2014-07-14 16:58

Miqrasiya faylını yaradın:

 rails g migration FixName 

# Db / migrate / xxxxxxxxxx.rb yaradır

Öz iradənizi etmək üçün köçürməni düzəldin.

 class FixName < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end 
4
28 дек. Cavab vipin 28 dekabr verilir . 2015-12-28 16:24 '16 saat 16:24 'da, 2015-12-28 16:24
 $: rails g migration RenameHashedPasswordColumn invoke active_record create db/migrate/20160323054656_rename_hashed_password_column.rb 

Bu miqrasiya faylını açın və aşağıda göstərildiyi kimi bu faylı redaktə edin (Orijinal table_name daxil edin)

 class RenameHashedPasswordColumn < ActiveRecord::Migration def change rename_column :table_name, :hased_password, :hashed_password end end 
4
23 марта '16 в 8:49 2016-03-23 08:49 Cavab Prabhakar tərəfindən 23 mart '16, saat 8:49 2016-03-23 ​​08:49 'də verilir

rails g migration ChangesNameInUsers (və ya zəng etmək istədiyiniz hər hansı)

Yalnız yaradılan köç faylını açın və bu xəttin üsula ( def changeend arasında) əlavə olun:

rename_column :table_name, :the_name_you_want_to_change, :the_new_name

Dosyayı qeyd edin və rake db:migrate çalıştırın rake db:migrate konsolda rake db:migrate

Adı həqiqətən verilənlər bazasında dəyişdiyini görmək üçün schema.db yoxlayın!

Ümid edirəm bu kömək edir :)

4
23 дек. Cavab Maddie 23 dekabr verilir. 2016-12-23 19:10 '16 saat 19:10 'da 2016-12-23 19:10
  def change rename_column :table_name, :old_column_name, :new_column_name end 
3
08 июня '17 в 21:01 2017-06-08 21:01 Cavab Apoorv tərəfindən 08 İyun 08 'da 21:01 2017-06-08 21:01' də verilir

Rails köçünə bir Ruby yaradılması :

 $:> rails g migration Fixcolumnname 

Kodu köç faylına (XXXXXfixcolumnname.rb) daxil edin :

 class Fixcolumnname < ActiveRecord::Migration def change rename_column :table_name, :old_column, :new_column end end 
3
26 янв. Cavab 26 yanvarda vipin tərəfindən verilir . 2016-01-26 15:26 '16 'da 15:26' də 2016-01-26 15:26

Ruby'i Rails konsolunda açın və daxil edin:

 ActiveRecord::Migration.rename_column :tablename, :old_column, :new_column 
2
03 июня '15 в 10:46 2015-06-03 10:46 Cavab rinold simon tərəfindən verilir 03 İyun '15, 10:46 2015-06-03 10:46

Bunun iki yolu var:

  • Bu tipdə, avtomatik olaraq geri çəkildikdə tərs kodu işlədilir.

     def change rename_column :table_name, :old_column_name, :new_column_name end 
  • Bu tip üçün rake db:migrate metodunu işə salır və 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 
2
29 янв. Cavab 29 yanvarda Sarwan Kumar tərəfindən verilir 2015-01-29 13:47 '15 at 13:47 2015-01-29 13:47

Mən raylar 5.2 üzərində olduğumu və bir istifadəçinin cihazında bir sütunun adını dəyişməyə çalışıram.

rename_column bit mənim üçün işləmişdir, lakin :table_name rename_column səhv "İstifadəçilərin cədvəli tapılmadı". Mənim üçün çox iş var.

 rails g RenameAgentinUser 

Sonra köç faylını dəyişdirin:

 rename_column :users, :agent?, :agent 

Agenti haradadır? köhnə sütun adı

1
06 сент. Cavab məzarı verildi 06 Sentyabr. 2018-09-06 16:42 '18 at 4:42 pm 2018-09-06 16:42

Öpüşün olsun. Bütün bunlar üç sadə addımdır. Rails üçün aşağıdakı iş 5.2 .

1 Miqrasiya yaradın

  • rails g migration RenameNameToFullNameInStudents

  • rails g RenameOldFieldToNewFieldInTableName - bu, daha sonra kod bazasına olduqca aydın şəkildə çatacaqdır. (masanın adı üçün çoxluq istifadə edin).

2. Miqarı düzəldin

# я prefer to explicitly write the methods. # я prefer to explicitly write the methods. up and down methods.

#./db/migrate/20190114045137_rename_name_to_full_name_in_students.rb

 class RenameNameToFullNameInStudents < ActiveRecord::Migration[5.2] def up # rename_column :table_name, :old_column, :new_column rename_column :students, :name, :full_name end def down # Note that the columns are reversed rename_column :students, :full_name, :name end end 

3. Göçmenlerinizi çalıştırın

rake db:migrate

Və siz yarışa gedəcəksiniz!

0
14 янв. Cavab BKSpurgeon 14 yanvar verilir . 2019-01-14 08:06 '19 saat 08:06 'da 2019-01-14 08:06

Yalnız əmri istifadə edərək köç edin

 rails g migration rename_hased_password 

Bundan sonra transferi redaktə edin, dəyişiklik üsuluna aşağıdakı satırı əlavə edin

 rename_column :table, :hased_password, :hashed_password 

Bu hiylə etməlidir.

0
05 окт. Cavab Ratnam Yadav 05 oktyabr tərəfindən verilir . 2017-10-05 15:02 '17 də 15:02 2017-10-05 15:02

Rails 5 Miqrasiya dəyişiklikləri

məsələn:

rails g model Student student_name: string age: integer

sütun tələbə_adı adını dəyişmək istəyirsən

Qeyd: - relsli db: migrate etmirsinizsə

Aşağıdakı addımları edə bilərsiniz.

rails d model Şagirdin tələbə adı: xəttin yaşı: tamsayı

Bu, yaradılmış miqrasiya faylı aradan qaldırır, indi sütun adını düzəldə bilərsiniz.

rails g model Tələbənin adı: xətt yaşı: tam ədəd

Əgər köçdisə (relslər db: migrate), sütun adını dəyişdirmək üçün aşağıdakı seçimlər

raylar və köçürmə RemoveStudentNameFromStudent student_name: string

rels z migration AddNameToStudent adı: string

0
20 дек. Cavab prasanthrubyist verilir 20 dekabr. 2017-12-20 15:08 '17 at 15:08 2017-12-20 15:08

Və ya SQL execute üçün istifadə edin, lakin tövsiyə olunmur

 execute "ALTER TABLE table_name change COLUMN old_column_name new_colmn_name column_data_type;" 
-1
03 дек. Cavab fangxing verilir 03 Dek. 2017-12-03 04:46 '17 'da 4:46' də 2017-12-03 04:46 'də

Yeniləmə . Create_table yaratmaq üçün ən yaxın əmiuşağı dəyişiklikdir, mövcud tabloları dəyişdirmək üçün istifadə olunur. Create_table kimi istifadə olunur, lakin blok tərəfindən alınan obyekt daha çox fəndləri bilir. Məsələn:

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

Digər üsullarla bunu yaparsak, bu metod daha effektivdir: index / index əlavə et / sütunu əlavə edin, məsələn, aşağıdakıları edə bilərik:

 # 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 #... 
-1
21 мая '16 в 8:32 2016-05-21 08:32 Cavab Hieu Pham tərəfindən 21 May 'da 8:32' də veriləcək 2016-05-21 08:32

haqqında digər suallar və ya bir sual