【Ruby on Rails7】id以外のカラムの重複チェックについて

この記事では、id以外のカラムについて、重複チェックを行う手法について説明いたします。

目次

何を行いたいか?

例えば、顧客マスターといったものを定義したい場合、Railsが勝手に採番してしまうidの他に、外部連携等を兼ねて、他のシステムでも使用している顧客コードを定義したいといったニーズがあるかと思います。

初期段階では、(他に稼働している)基幹システム等から、顧客マスタで使用する項目を抜き出し、移行すると思いますが、それ以降については、(二重メンテになるかもしれませんが)マスタメンテ画面にて変更を行う…といった仕様はあるかと思います。

(他に稼働している)基幹システムの顧客マスターが主で、Railsが従で、Rails側の変更はまずない場合は、夜間バッチ等で、毎日Rails側を置き換える手法が一般的かもしれません。
(idによる連携もあるので、結構大変かと思いますが…)
ただ、緊急時に備え、マスターの変更をかけたいというニーズはあるかもしれませんね。

その際に、顧客コードが重複しないか?といった一意性のバリデーションは必須条件になります。

どう実装するか?

マイグレーション

まずは、マイグレーションでindexを登録します。

bundle exec rails generate migration ChangeDuplicate

db/migrateディレクトリに作成されたファイルに以下を追記します。

    add_index :customers, :customer_cd, unique: true

以下のコマンドを実行します。

rake db:migrate

モデルの変更

さらに、モデルファイルapp/models/customer.rbに追記します。

  validates :customer_cd, presence: true, uniqueness: true

uniqueness: trueにて、顧客コードの重複チェックが行われます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA

目次