validatesメソッド
下記の構文を使うことでモデルのカラムに対して検証ルールを設定できます。
1 |
validates カラム名,検証ルール |
app/models/モデル名.rb
validatesメソッドを実行する際に記述するソースファイルになります。デフォルトでは下記のように何もクラス内に何も処理が記述されていません。
1 2 |
class User < ApplicationRecord end |
下記のように編集します。
1 2 3 |
class User < ApplicationRecord validates :username,presence: true end |
そうすると下記のように未入力になっている場合はバリデーションエラーが出るようになります。
Railsでデフォルトで用意されている検証ルール
presence
未入力を許可しない。(allow_blankの逆)
allow_blank
未入力を許可する。(presenceの逆)
numericality
数値のみ許可する。
only_integer
1 |
numericality:{only_integer:true} |
少数を許可しない。numericalityのオプションとして指定します。
format:{with:正規表現}
正規表現を指定します。
inclusion
数値の範囲や、文字列のフォーマットや構成文字種が想定どおりか。
uniqueness
既に同一のデータが登録されていないかチェックします。
case_sensitive
大文字と小文字の区別をします。
length
長さ制限をする。
maximum
長さの上限
minimum
長さの下限
in: 最小長..最大長
長さの範囲
is: 長さ固定指定
長さの指定
confirmation
パスワードやメアドが確認用の入力内容と一致しているかチェックする。
どこにエラーが格納されるか。
ActiveModel::Errorsオブジェクトのerrosにエラーコード等が格納されることになります。モデルオブジェクト.errosでアクセスすることが可能です。
独自の検証ルール
下記のようにプライベートメソッドとして記述すれば独自の検証ルールを作成することが可能です。
1 2 3 4 5 6 7 8 |
class User < ApplicationRecord validate :検証メソッド名 private def 検証メソッド名 独自の検証処理 end end |
独自の検証ルールを作り際は「validatesメソッド」ではなく「validateメソッド」になるので注意です。
errors.addメソッド
検証でエラーになる場合は下記の構文でエラーを画面に出力します。
1 |
errors.add(カラム名,'メッセージ') |
日本語化
Railsのアプリケーションではエラーメッセージはデフォルトで英語になっています。英語以外の言語を使いたい場合は下記の手順を実施する必要があります。(手順は日本語に翻訳する手順になります。)
Gemfileに下記のGemを追加します。
1 |
gem 'rails-i18n' |
Railsサーバーを再起動すればバリデーションメッセージをある程度日本語化することができます。
ただ、個別のプロパティ名は日本語化されないのでconfig/locales/ja.ymlにて日本語名を指定する必要があります。
1 2 3 4 5 6 |
ja: activerecord: attributes: モデル名: name: 日本語名1 age: 日本語名2フ |
rails-i18nリポジトリから翻訳ファイルを取得する。
下記コマンドを実行して(アプリ名)/config/localesに日本語翻訳ファイルをダウンロードします。
1 |
wget https://raw.github.com/svenfuchs/rails-i18n/master/rails/locale/ja.yml -P config/locales/ |
自身で作成することも可能ですが、上記のようにGitHubのrails-i18nリポジトリに既に翻訳されたファイルがあるのでそれを利用するが早いです。
「(アプリ名)/config/initializers/locale.rb」というファイルを新たに作成して下記の記述を記述します。
1 |
Rails.application.config.i18n.default_locale = :ja |
この設定をすればデフォルトで日本語のコンテンツを使うように設定が可能です。
もしくは、「(アプリ名)/config/application.rb」に以下の記述を追加するのもありです。
1 |
config.i18n.default_locale = :ja |
この記事へのコメントはありません。