🍎

【Rails】バリデーションの設定+エラーメッセージ表示方法

2023/07/23に公開
  • バリデーションとは
  • バリデーションの書き方
  • バリデーションヘルパーの種類
  • バリデーションによるエラーメッセージの表示方法

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 } 

バリデーションヘルパーはまだまだありますが、ひとまずここまで!

下記サイトを参考にさせていただきました🙏

https://pikawaka.com/rails/validation

https://nanayaku.com/rails-validations/

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