バリデーションとは?
オブジェクトがDBに保存される前に、そのデータが正しいかどうか検証する仕組みをバリデーションと呼ぶ。
例えば、メールアドレスを入力して欲しい場合、メールアドレス以外が入ったものが送られた時、DBに保存しないようにする。
使い方の構文
validates :指定した属性またはオブジェクトorカラム名, バリデーションヘルパー:
例
validates :title, presence: true
validates :category, acceptance: true
validates :title, length: { minimum: 1 } # 「1文字以上」
validates :title, length: { maximum: 75 } # 「75文字以下」
validates :title, length: { in: 1..75 } # 「1文字以上75文字以下」
validates :password, length: { is: 8 } # 「8文字のみ」
バリデーションヘルパーの種類
・presence
空でないかを検証
・absence
からであるかを検証
・uniqueness
値が唯一であり、重複していないかを検証(メアドの入力等で使える)
・acceptance
チェックボックスがオンになっているかどうか検証(同意した。のチェックの際に使っている)
他にもバリデーションヘルパーはある。
そのほかはこちらを参照
https://pikawaka.com/rails/validation
エラーメッセージの表示方法
バリデーションを設定すると、設定したバリデーションヘルパーがture or falseの状態で正しいく入力されているかどうか判断することができるが、
これだけでは、ユーザーが間違って情報を入力した場合、なぜ間違っているのか認識することができない。
→エラーメッセージを設定する必要がある。
エラーメッセージを設定する構文 例userモデルの場合
<% if @user.errors.any? %>
<div id="error_explanation" class="alert alert-danger">
<ul>
<% @user.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
上記では、まずエラーがあったか確認をしている。
errors.full_messagesは
全てのエラーメッセージを配列で自動的に取得している
複数のメッセージが格納されていることもあるので、全て表示するには each でループで回す。
エラーメッセージの日本語化
このままの設定では、エラーメッセージが英語になってしまう。
メッセージを日本語化するには、
rails-i18n
と言うgemを使用する。
順序としては、
① gem file に'rails-i18n'を追加し、bundle install
② config/application.rb内に config.i18n.default_locale = :ja
③ その後、サーバーを起動すると、エラーメッセージの一部が日本語化されているが、email、nameのようなカラムは日本語化されていない。
そこでカラム名を日本語化していきましょう。config/localesないにja.ymlを追加し以下を入力してください。
ja:
activerecord:
models:
user: ユーザー
attributes:
user:
name: 名前
email: メールアドレス