Ruby on Rails の移行で列を一意にしてインデックスを作成するにはどうすればよいでしょうか? 質問する

Ruby on Rails の移行で列を一意にしてインデックスを作成するにはどうすればよいでしょうか? 質問する

Ruby on Rails 移行スクリプトで列を作成したいと思いますunique。最適な方法は何ですか? また、テーブル内の列にインデックスを付ける方法はありますか?

uniqueを単に使用するのではなく、データベース内の列を強制したいと思います:validate_uniqueness_of

ベストアンサー1

古いバージョンの Rails に関する短い回答 (Rails 4 以降に関する他の回答を参照):

add_index :table_name, :column_name, unique: true

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

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

「インデックス名が長すぎます」というメッセージが表示される場合は、name: "whatever"add_index メソッドを追加して名前を短くすることができます。

きめ細かい制御のために、execute直接 SQL を実行する " " メソッドがあります。

それでおしまい!

これを通常の古いモデル検証の代わりに行う場合は、どのように動作するかを確認してください。モデルレベルの検証を行わないと、ユーザーへのエラー報告が適切に行われない可能性があります。常に両方を行うことができます。

おすすめ記事