Rails 迁移重命名索引和foreign_key 列
Posted
技术标签:
【中文标题】Rails 迁移重命名索引和foreign_key 列【英文标题】:Rails migration rename index and foreign_key column 【发布时间】:2018-07-24 12:34:00 【问题描述】:在我的 schema.rb 中,
create_table "devices", force: :cascade do |t|
t.string "uuid"
t.bigint "device_return_id"
t.index ["device_return_id"], name: "index_devices_on_device_return_id"
end
create_table "device_returns", force: :cascade do |t|
t.string "code"
t.datetime "returned_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_foreign_key "devices", "device_returns", column: "device_return_id"
如何使用 rails g migration 将所有“device_return”更改为“exchange”?
我厌倦了 rename_table 和 rename_index。他们没有改变 t.index["device_return_id']
谢谢
【问题讨论】:
【参考方案1】:改外键可以试试
rails g migration ChangeForeignKeyForDevices
那么您的迁移应该如下所示
class ChangeForeignKeyForDevices < ActiveRecord::Migration
def change
rename_column :device_returns, :old_column_name, :new_column_name
end
end
然后运行迁移
rails db:migrate
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
rename_column(table_name, column_name, new_column_name):重命名列但保留类型和内容。
rename_index(table_name, old_name, new_name):重命名索引。
rename_table(old_name, new_name):将名为 old_name 的表重命名为 new_name。
【讨论】:
以上是关于Rails 迁移重命名索引和foreign_key 列的主要内容,如果未能解决你的问题,请参考以下文章
如何编写迁移以重命名 Rails 中的 ActiveRecord 模型及其表?