Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What is going on with this article?
@junara

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

More than 3 years have passed since last update.

概要

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

参考

所感

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

17
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
junara
10年間医療の研究していたが、Webサービス作りたくて、エンジニアへ。 Rails, Javascritptのエンジニアとして働きながら、生命科学学会検索サービスを作りました。 https://www.dokode.work
bldt
"Your growth, Improve the world" をビジョンに掲げ、自社事業やシステム開発サービスを提供しています

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
17
Help us understand the problem. What is going on with this article?