inuinu blog(開発用)

BOT @wagagun の開発ノウハウや、IT向け?の雑記ブログです。

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

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

何を行いたいか?

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

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

(他に稼働している)基幹システムの顧客マスターが主で、Railsが従で、Rails側の変更はまずない場合は、夜間バッチ等で、毎日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にて、顧客コードの重複チェックが行われます。