Railsでreferencesを使用した外部キーに、同時にUnique属性を設定する
Railsで新しいモデル(テーブル)の作成で外部キー(外部参照)を設定する時に、 同時にユニーク属性を設定していく手順を記載します。 余り使う機会はないかもしれませんが、今回は以下の例を使っていきます。 (例)Userが複数のOrganizationに所属できる多対多の関係で、そのうちの一のOrganizationをデフォルトとして保持するDefaultOrganizationテーブルを作成する場合。 以下がER図です。 試行錯誤して結果を得たので、経過も踏まえて記述します。 解答に書いている事がやり方なので、手早く正解が欲しい方はそちらをご覧下さい。 なぜ必要なのか 使用しているDBにもよりますが、先に出した例であれば、中間テーブルにデフォルトフラグ的な項目があれば良いと思います。 しかし、それだとDefaultOrganizationはユーザーにつき1つだけというユニーク属性(一意制約)を設定できない場合があります。 アプリ側で制限したら良いよってポリシーの場合は特段ここまで考える必要はありませんが、 DBのリレーションまでキチンと設計しておきたい場合、PostgreSQLやMySQLであれば部分インデックスで可能ですが、OracleやMySQLだと部分インデックスが使えないって制限があります。 そういった場合に使えるかと思います。 なお、中間テーブルと、中間テーブルのフラグについては、こちらに書きました。 www.techbox.jp 普通に外部参照だけをする場合 マイグレーションファイルを作成します。 rails g migration CreateDefaultOrganization user:references relation:references ※この時に、userとorganizationにidを付与しません。 referencesにした場合、勝手に補完されますので、モデル名だけで良いです。 すると、以下の様なマイグレーションファイルが作成されます。 class DefaultOrganization < ActiveRecord::Migration def change create_table :default_organizations do