ruby-添加和删除参考的Rails迁移

使用rails generate migration AddClientToUser创建迁移文件后,我可以像这样编辑迁移文件:

class AddClientToUser < ActiveRecord::Migration
  def self.up
    change_table :users do |t|
      t.references :client
    end
  end

  def self.down
    change_table :users do |t|
      t.remove :client_id
    end
  end
end

这是反转迁移中添加的参考列的正确方法吗?

4个解决方案
36 votes

没错! 您还可以选择:

  def self.down
      remove_column :users, :client_id
  end
Daniel answered 2020-08-12T09:16:00Z
29 votes

导轨4.2.1

rails g migration RemoveClientFromUsers client:references

会产生类似的迁移:

class RemoveClientFromUser < ActiveRecord::Migration
  def change
    remove_reference :users, :client, index: true, foreign_key: true
  end
end

另外,一个人可以随意添加以下内容来添加另一个或其他参考:

add_reference :users, :model_name, index: true, foreign_key: true

change方法中保存对迁移的更改后,最后运行rake db:migrate,将产生所需的结果。

MulleOne answered 2020-08-12T09:16:33Z
23 votes

在Rails 4之后,您可以执行以下操作

class AddClientToUser < ActiveRecord::Migration
  def change
    add_reference :users, :client, index: true
  end
end

它将为您处理上升和下降,以及创建外键索引。 您也可以使用remove_reference进行相反的操作。

Ryan answered 2020-08-12T09:16:59Z
2 votes

使用Rails 4,您可以输入:

$ rails生成迁移AddClientRefToUser client:references

在控制台中,这和Ryan所说的一样。

xhenryx14 answered 2020-08-12T09:17:28Z
translate from https://stackoverflow.com:/questions/5648970/rails-migration-with-adding-and-removing-reference