Railsで整数のみ、桁数指定でバリデーションを追加する

FBCのdeviseプラクティスで郵便番号に整数のみ、桁数指定でバリデーションを追加したかったので方法を調べました。

結論

バリデーションで以下を指定することで整数のみ、桁数指定を追加できます。

  • 整数のみ: numericality: { only_integer: true }
  • 桁数指定: length: { is: 桁数 }

Active Record バリデーション - Railsガイド

Active Record バリデーション - Railsガイド

実装例

Userモデルのzipcode カラムに整数7桁のバリデーションを追加します。

app/models/user.rb にバリデーションを追記します。

# app/models/user.rb

# frozen_string_literal: true

class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  # 下記を追加
  validates :zipcode, length: { is: 7 }, numericality: { only_integer: true }
end

これで整数7桁限定でバリデーションが掛かるようになります。

まとめ

バリデーションについてすっかり忘れていたので良い復習になりました。 ActiveRecordについての理解が全然なので少しづつ理解を深めていきたいと思います。

参照

Active Record バリデーション - Railsガイド

Active Record バリデーション - Railsガイド