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 模型及其表?

如何通过 Rails 迁移克隆数据库表?

Rails4迁移 - 向add_reference方法添加null:false?

Rails:重命名控制器和相应的模型

当foreign_key为字符串时遗留数据的rails关联

将 foreign_key 值传递给 Rails 控制器的更好方法