1. ホーム
  2. ruby-on-rails

[解決済み] Ruby on Railsのマイグレーションで、カラムをユニークにしてインデックスを作成するにはどうすればよいですか?

2022-03-21 05:30:33

質問

コラムを作りたい unique をRuby on Railsのマイグレーションスクリプトに追加しました。これを行うための最良の方法は何ですか?また、テーブルのカラムにインデックスを付ける方法はありますか?

を強制したい。 unique カラムを使用するのとは対照的に、データベースの :validate_uniqueness_of .

解決方法は?

Railsの古いバージョンのための短い答えです(Rails 4+については他の答えを参照してください)。

add_index :table_name, :column_name, unique: true

複数のカラムをまとめてインデックスを作成するには、単一のカラム名ではなく、カラム名の配列を渡します。

add_index :table_name, [:column_name_a, :column_name_b], unique: true

もし、"index name... is too long"と表示された場合は、以下のような方法で、index name... を追加します。 name: "whatever" をadd_indexメソッドに追加して、名前を短くすることができます。

きめ細かな制御を行うために、" execute ストレートなSQLを実行するメソッドです。

それだ!

もしこれを通常の古いモデルの検証の代わりとして行っているのであれば、どのように動作するかを確認してください。モデルレベルのバリデーションがないと、ユーザーへのエラーレポートがうまくいかない可能性があります。常に両方を行うことができます。