web-dev-qa-db-ja.com

アクティブレコードに一意のインデックスを持つ新しいテーブルを作成する方法/ Rails 4 Migration

Rails移行によって新しいテーブルを作成し、それに一意のインデックスを追加するにはどうすればよいですか?

ドキュメントでは、作成後にテーブルにインデックスを追加する方法を見つけましたが、同じ移行ファイルでどのように両方を行う-テーブルを作成し、一意のインデックスを追加するのですか?

35
newUserNameHere

完全なプロセスは次のとおりです。

移行を生成(Rails generate migration CreateFoos bar:string

移行を次のように変更します。

class CreateFoos < ActiveRecord::Migration
  def change
    create_table :foos do |t|
      t.string :bar, :null => false

      t.index :bar, unique: true
    end
  end
end

実行rake db:migrate

59
newUserNameHere

よりコンパクトな方法:

class CreateFoobars < ActiveRecord::Migration
  def change
    create_table :foobars do |t|
      t.string :name, index: {unique: true}
    end
  end
end
16
AkaZecik

移行を生成した後Rails generate migration CreateBoards name:string description:string

移行ファイルで、次のようにインデックスを追加します。

class CreateBoards < ActiveRecord::Migration
  def change
   create_table :boards do |t|
     t.string :name
     t.string :description

     t.timestamps
   end

   add_index :boards, :name, unique: true

 end
end
9
Kirti Thorat

移行ファイルを変更せずにジェネレーターでテーブルとインデックスを作成できます

一意のインデックスの場合

Rails generate model CreateFoos bar:string:uniq

一意でないインデックスの場合

Rails generate model CreateFoos bar:string:index
5
Randomtheories

Rails 5では、列定義とともにインデックスオプションを提供できます。

create_table :table_name do |t|
  t.string :key, null: false, index: {unique: true}
  t.jsonb :value

  t.timestamps
end


Column   |            Type             | Collation | Nullable |                 Default
------------+-----------------------------+-----------+----------+-----------------------------------------
id         | bigint                      |           | not null | nextval('table_name_id_seq'::regclass)
key        | character varying           |           | not null |
value      | jsonb                       |           |          |
created_at | timestamp without time zone |           | not null |
updated_at | timestamp without time zone |           | not null |
Indexes:
  "table_name_pkey" PRIMARY KEY, btree (id)
  "index_table_name_on_key" UNIQUE, btree (key)

0
Akanksha Sharma