我意外地创建了一个Rails(带有Postgres 9.4的Rails 4.2)表,其中包含以下内容:
class OrderDiscounts < ActiveRecord::Migration
def change
create_table :order_discounts, id: false do |t|
t.integer :order_id, primary: true
t.integer :location_id
并希望这样做(即标准表是主键,order_id只是常规列):
class OrderDiscounts < ActiveRecord::Migration
def change
create_table :order_discounts do |t|
t.integer :order_id
t.integer :location_id
我已经部署到生产中(虽然此表中没有行)。为实现这一目标,Rails迁移会是什么?
答案 0 :(得分:1)
我看到了一些完成任务的选项。
首先,生产rollback。编辑迁移(删除primary: true
)并重新部署,运行迁移。
其次,在新迁移中删除并重新创建表。
class AwesomeMigration < ActicveRecord::Migration
def change
drop_table :order_discounts
create_table :order_discounts do |t|
t.integer :order_id
t.integer :location_id
t.timestamps null: false # or drop this altogether if you don't want created_at and updated_at cols
end
end
end
第三,在新迁移中更改表格
class AwesomeMigration < ActicveRecord::Migration
def change
change_column :order_discounts, :order_id, :integer, primary_key: false
add_column :order_discounts, :id, :integer, primary_key: true
end
end
我相信这三者中的任何一个都能实现最终目标。