是否可以对Rails表进行此更改?

时间:2015-11-03 20:11:31

标签: ruby-on-rails postgresql

我意外地创建了一个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迁移会是什么?

1 个答案:

答案 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

我相信这三者中的任何一个都能实现最终目标。