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 を実行する " " メソッドがあります。
それでおしまい!
これを通常の古いモデル検証の代わりに行う場合は、どのように動作するかを確認してください。モデルレベルの検証を行わないと、ユーザーへのエラー報告が適切に行われない可能性があります。常に両方を行うことができます。