何を行いたいか?
例えば、顧客マスターといったものを定義したい場合、Railsが勝手に採番してしまうidの他に、外部連携等を兼ねて、他のシステムでも使用している顧客コードを定義したいといったニーズがあるかと思います。
初期段階では、(他に稼働している)基幹システム等から、顧客マスタで使用する項目を抜き出し、移行すると思いますが、それ以降については、(二重メンテになるかもしれませんが)マスタメンテ画面にて変更を行う…といった仕様はあるかと思います。
その際に、顧客コードが重複しないか?といった一意性のバリデーションは必須条件になります。
どう実装するか?
マイグレーション
まずは、マイグレーションでindexを登録します。
bundle exec rails generate migration ChangeDuplicate
db/migrate
ディレクトリに作成されたファイルに以下を追記します。
●db/migrate/20231004004851_change_duplicate.rb(日付の部分はその都度異なります。)
add_index :customers, :customer_cd, unique: true
以下のコマンドを実行します。
rake db:migrate
モデルの変更
さらに、モデルファイルapp/models/customer.rb
に追記します。
validates :customer_cd, presence: true, uniqueness: true
uniqueness: true
にて、顧客コードの重複チェックが行われます。