web-dev-qa-db-ja.com

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

これは、移行で追加された参照列を逆にする正しい方法ですか?

42
Matt Connolly

そうです!そして、あなたも行くことができます:

  def self.down
      remove_column :users, :client_id
  end
36
Daniel

Rails 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移行への変更を保存した後、目的の結果が生成されます。

29
MulleOne

Rails 4の後、次のことができます

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

外部キーインデックスの作成と同様に、アップとダウンを処理します。 remove_reference 反対のことを行います。

23
Ryan

Rails 4を使用すると、次のように入力できます。

$ Rails移行の生成AddClientRefToUser client:references

コンソールで、これはライアンが言ったことと同じになります。

2
xhenryx14