【 Ruby on Rails】一意制約
どうやって一意制約を設けるか。
軽くググるとふたつの方法
[Rails]マイグレーション時にUNIQUEインデックスを設定する方法(単体・複数の場合) – hello-world.jp.net
ActiveRecord4のバリデーションで複数カラムにユニーク制約を付ける方法
SchemaStatements#add_index を使う
add_index :users, [:user_id, :event_id], unique: true
TableDefinition#index を使う
create_table :invited_users do |t| t.references :user, foreign_key: true t.references :event, foreign_key: true t.timestamps t.index [:user_id, :event_id], unique: true end
一意制約キーの名称について
TableDefinition#index
にもSchemaStatements#add_index
にもname
オプションがあり一意制約キーの名称を付けることができる。
name
オプションは省略可能で、以下のフォーマットで命名される。
{テーブル名}_on_{カラム名}_and_{カラム名}...
例)invited_users
テーブルにuser_id
カラムとevent_id
カラムで一意制約を設けた場合
index_invited_users_on_user_id_and_event_id
長いですね、、、
カラムが2つならまだいいですが、3つ、4つと増える場合は、name
オプションを利用して明示的に命名してあげたほうが良さそうです。