60

で移行ファイルを作成した後、次の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

4 に答える 4

70

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、移行への変更を保存した後に最後に実行すると、目的の結果が得られます。

于 2017-04-28T21:40:38.397 に答える
47

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

  def self.down
      remove_column :users, :client_id
  end
于 2011-04-13T12:43:44.157 に答える
27

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

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

それはあなたのためにアップとダウンを処理し、外部キーインデックスを作成します。remove_reference逆のこともできます。

于 2013-10-01T16:43:49.147 に答える
2

Rails 4では、次のように入力できます。

$ railsは移行を生成しますAddClientRefToUserclient:references

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

于 2013-10-24T02:48:14.707 に答える