Saya mengerikan dalam penamaan dan menyadari bahwa ada satu set nama yang lebih baik untuk model saya di aplikasi Rails saya.
Apakah ada cara untuk menggunakan migrasi untuk mengganti nama model dan tabel yang sesuai?
ruby-on-rails
migration
rails-activerecord
Hanya baca
sumber
sumber
rake db:migrate
, itu akan gagal. Anda bisa kembali dan mengubah nama-nama itu dalam migrasi, tetapi itu akan berantakan. Anda mungkin lebih baik hanya membuat model yang sama sekali baru daripada mengganti namanya.rake db:schema:load
?rake db:migrate
untuk membuat database dari awal secara aktif tidak dianjurkan, justru karena kekhawatiran yang ditunjukkan oleh andrew.Jawaban:
Ini sebuah contoh:
Saya harus pergi dan mengganti nama file pernyataan model secara manual.
Edit:
Di Rails 3.1 & 4,
ActiveRecord::Migration::CommandRecorder
tahu cara membalikkan migrasi rename_table, sehingga Anda bisa melakukan ini:(Anda masih harus melalui dan secara manual mengubah nama file Anda.)
sumber
git grep -i activit
sangat terbuka.Di Rails 4 yang harus saya lakukan adalah perubahan def
Dan semua indeks saya diurus untuk saya. Saya tidak perlu memperbarui indeks secara manual dengan menghapus yang lama dan menambahkan yang baru.
Dan itu berfungsi menggunakan perubahan untuk naik atau turun dalam hal indeks juga.
sumber
Jawaban dan komentar lainnya mencakup penggantian nama tabel, penggantian nama file, dan memahami kode Anda.
Saya ingin menambahkan beberapa peringatan lagi:
Mari kita gunakan contoh dunia nyata yang saya hadapi hari ini: mengganti nama model dari 'Merchant' menjadi 'Business.'
sumber
Anda juga perlu mengganti indeks Anda:
Dan ganti nama file Anda dll, secara manual seperti dijelaskan oleh jawaban lain di sini.
Lihat: http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
Pastikan Anda dapat mengembalikan dan memutar ke depan setelah Anda menulis migrasi ini. Ini bisa menjadi rumit jika Anda mendapatkan sesuatu yang salah dan macet dengan migrasi yang mencoba mempengaruhi sesuatu yang tidak ada lagi. Sampah seluruh database terbaik dan mulai lagi jika Anda tidak dapat memutar kembali. Jadi waspadai Anda mungkin perlu membuat cadangan sesuatu.
Juga: periksa schema_db untuk setiap nama kolom yang relevan di tabel lain yang ditentukan oleh has_ atau milik_to atau sesuatu. Anda mungkin perlu mengeditnya juga.
Dan akhirnya, melakukan ini tanpa suite uji regresi akan menjadi gila.
sumber
Anda dapat menjalankan perintah ini: rails g migration rename_ {old_table_name} ke {new_table_name}
setelah Anda mengedit file dan menambahkan kode ini dalam perubahan metode
rename_table: {old_table_name},: {new_table_name}
sumber