🍎
【Rails】バリデーションの設定+エラーメッセージ表示方法
- バリデーションとは
- バリデーションの書き方
- バリデーションヘルパーの種類
- バリデーションによるエラーメッセージの表示方法
1.バリデーションとは
正しいデータをデータベースに保存するために設定します。
例えば、電話番号を入力するフォームがあったとします。
電話番号なので数字以外の文字を入力されてしまったら、正しいデータがとれません。
2桁や3桁など、文字数が足りなくても問題です。
そういった問題を防ぐために、バリデーションを行います。
バリデーションを行うことで、送信できるデータを数字のみ、かつ〇文字、等と指定することが可能になります。
また、空欄で送信されることを防ぐことも可能です。
2.バリデーションの書き方
「model」に記述します。
app/models/user.rb
※例として、Userモデル、telephone_numberカラムにバリデーションを設定
class User < ApplicationRecord
validates :telephone_number, presence: true, numericality: {only_integer: true}
- 記述方法「validates :カラム名, バリデーションヘルパー」
- 「presence: true」=空欄はNG。入力されたデータのpresence(存在)を確認→true(存在する)であればデータ保存。
- 「numericality: {only_integer: true}」=整数のみ許可。
3.バリデーションヘルパーの種類
model
空欄ではない
validates :カラム名, presence: true
model
空欄でもよい
validates :カラム名, allow_blank: true
model
値が一意であり重複していない
validates :カラム名, uniqueness: true
model
整数のみ許可
validates :カラム名, numericality: {only_integer: true}
model
文字数制限(xxの箇所に数字を記入)
・〇文字~〇文字まで
validates :カラム名, length: { in: xx..xx }
・最低〇文字以上
validates :カラム名, length: { minimum: xx }
・最大〇文字以内
validates :カラム名, length: { maximum: xx }
・〇文字のみ
validates :カラム名, length: { is: xx }
バリデーションヘルパーはまだまだありますが、ひとまずここまで!
下記サイトを参考にさせていただきました🙏
4.バリデーションによるエラーメッセージの表示
1.コントローラーにif式を用いて記述
app/controllers/books_controller.rb
class BooksController < ApplicationController
:
:
def create
@book = Book.new(book_params)
if @book.save
redirect_to book_path(@book.id)
else
render :new
end
end
:
:
- バリデーションがtrueの場合、redirect_to book_path(@book.id)
- バリデーションがfalseの場合、render :new
2.ビューでエラーメッセージを表示
エラーメッセージを表示させたいビューに、下記を追記
app/views/new.html.erb
※「@xxxx」には適切な変数を入れる
<%= @xxxx.errors.count %>件のエラーが発生しました
<ul>
<% @xxxx.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
<% end %>
- 「errors」=モデルにバリデーションをかけた際、発生したエラー内容を確認できるメソッド
- 「any?」と組み合わせることでエラーが発生しているかを判定する
- 「full_messages」と組み合わせることでエラー内容を出力
以上で、バリデーションの設定+バリデーションによるエラーメッセージが表示できます!
Discussion