Ruby on Rails

【Ruby on Rails】入力チェック(validates)の実装方法

2020年6月24日

Ruby on Railsで入力チェック(validates)を実装する

Railsでは、入力データを検証するためのメソッド「validates」が用意されており、「validates」をmodelクラスに定義するだけで、入力チェックを実装することができます。

本記事では、「validates」メソッドを利用した入力チェックの実装方法について紹介します。

スポンサーリンク

必須チェック

presenceでカラムにデータが存在するか(空でないこと)を検証します。

validates :カラム名, presence: true

[modelクラスの例]

class User < ApplicationRecord
    validates :name, presence: true
    validates :address, presence: true
    validates :phone, presence: true
end

 

文字数チェック

lengthでカラムの長さを検証します。

validates :カラム名, length: {長さ制限のオプション}

[長さ制限のオプションの種類]

オプション説明指定例
maximum長さの上限maximum: 10
minimum長さの下限minimum: 1
in長さの範囲in: 10..12
is長さがの指定is: 10

[modelクラスの例]

class User < ApplicationRecord
    validates :name, length: {maximum: 10}
    validates :address, length: {minimum: 1}
    validates :phone, length: {in: 10..12}
end

 

数値チェック

numericalityで小数を含む、数値であることを検証します。

validates :カラム名, numericality: true

[modelクラスの例]

class User < ApplicationRecord
    validates :phone, numericality: true
end

スポンサーリンク

整数チェック

numericalityで小数を含まない、数値であることを検証します。

validates :カラム名, numericality: { only_integer: true }

[modelクラスの例]

class User < ApplicationRecord
    validates :phone, numericality: { only_integer: true }
end

 

重複チェック

uniquenessでデータが重複していないかを検証します。例えばユーザー登録時のメールアドレスなどのように、同じデータは1つだけであることを検証したい場合に使用します。

validates :カラム名, uniqueness: true

大文字/小文字の区別をしない場合は「case_sensitive: false」を指定します。

validates :カラム名, uniqueness: { case_sensitive: false }

[modelクラスの例]

  • 大文字/小文字の区別あり
class User < ApplicationRecord
    validates :address, uniqueness: true
end
  • 大文字/小文字の区別なし
class User < ApplicationRecord
    validates :address, uniqueness: { case_sensitive: false }
end

 

空を許可する

allow_blankでカラムのデータが空であることを許可します。このオプションだけを指定しても意味はなく、他のオプションと一緒に使う必要があります。

validates :カラム名, allow_blank: true

[modelクラスの例] ※長さが4桁以上必要だが、空は許可する

class User < ApplicationRecord
    validates :name, length: {minimum: 4}, allow_blank: true
end

 

正規表現チェック

formatで正規表現と一致するかを検証します。

validates :カラム名, format: { with: 正規表現 }

[modelクラスの例] ※英文字の正規表現

class User < ApplicationRecord
    validates :name, format: { with: /\A[a-zA-Z]+\z/ }
end

 

終わりに

本記事では「入力チェック(validates)の実装方法」について紹介しました。

次回は、CSSの「フレームワーク」であるBootstrapの導入手順を紹介します。

helpful