34
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Rails] DBにつけた一意制約(add_index xxxs, :yyy_id unique: true)を削除する

Last updated at Posted at 2018-03-26

概要

Railsのmigration時に加えた一意制約を解除する方法です。解除するためには、remove_indexを使えばOKです。

説明

例えば、テーブル名xxxs、カラム名yyy_idに対して下記のようなmigrationで一意制約がつけられているとします。

2018zzzzzzzzzz_create_xxx.rb
class CreateXxx < ActiveRecord::Migration[5.1]
  def change
    create_table :xxxs do |t|
      t.string :yyy_id
    end
    add_index :xxxs, :yyy_id, unique: true
  end
end

この場合、一意制約を解除するにはremove_indexをするだけです。

手順

まずmigrationファイルを作成します。(__DeleteYYYIdUniqIndexFromXXX__の部分はなんでもいいです。)

> rails g migration DeleteYYYIdUniqIndexFromXXX

すると、2018zzzzzzzzzz_delete_yyy_id_uniq_index_from_xxx.rb というファイル名のmigrationファイルが作成されています。

この作成されたmigrationファイルを下記の様に編集します。

2018zzzzzzzzzz_delete_yyy_id_uniq_index_from_xxx.rb
class DeleteYYYIdUniqIndexFromXXX < ActiveRecord::Migration[5.1]
  def change
    remove_index :xxxs, :yyy_id
  end
end

そしてmigration実行してください。

> rake db:migrate

これで終わり。

補足

もし、検索のためなどindexだけはつけておきたい場合は、remove_indexの後にadd_indexを追加すればOKです。

2018zzzzzzzzzz_delete_yyy_id_uniq_index_from_xxx.rb
class DeleteYYYIdUniqIndexFromXXX < ActiveRecord::Migration[5.1]
  def change
    remove_index :xxxs, :yyy_id
    add_index :xxxs, :yyy_id
  end
end

参考

所感

普通の話です。
ストレートな日本語の手順があれば役立つと思い、書かれていなかったので書きました。

34
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?