いーほろよいの技術ブログ

IT技術ブログになります。

Ruby on Railsのお勉強 〜お問い合わせフォーム編(Validation) その6〜

はじめに

漸くバリデーションに入ります。

フレームワークを使用する上で避けては通る事のできない道です。

ドキュメントを読んでみたのですが、端折っている箇所があって理解に時間が掛かるので、今回は初歩的な使い方に注力します。

↓こちら参考にしたドキュメントになります。

Active Record バリデーション | Rails ガイド

 

今回やる事

  • モデルにバリデーションを指定
  • 確認画面(inquiry/confirm)でバリデーションを実行
  • エラーメッセージの表示
  • エラーメッセージの日本語化

 

モデルにバリデーションを指定

class Inquiry < ActiveRecord::Base
  # Validation
  # name ... 2文字以上〜30文字以下
  # mali ... 未入力不可、255文字以下
  # mail_confirmation ... mailの入力確認
  # telephone ... 数字のみ
  validates :name, length: { in: 2..30 }
  validates :mail, confirmation: true, length: {maximum: 255}
  validates :mail_confirmation, presence: true
  validates :telephone, format: { with: /\A[0-9]+\z/ }

  def init(inq_params)
    @name = inq_params[:name]
    @mail = inq_params[:mail]
    @mail_confirmation = inq_params[:mail_confirmation]
    @telephone = inq_params[:telephone]
  end
end

 

確認画面(inquiry/confirm)でバリデーションを実行

class InquiryController < ApplicationController
  def index
    @inquiry = Inquiry.new(post_params)
  end

  def confirm
    @inquiry = Inquiry.new(post_params)
    if @inquiry.valid? == false
      logger.debug @inquiry.errors.messages
      render template: 'inquiry/index'
    end
  end

  def thanks
  end

  private
    def post_params
      if params.has_key?(:inquiry)
        params.require(:inquiry).permit(
          :name,
          :mail,
          :mail_confirmation,
          :telephone
        )
      else
        {}
      end
    end
end

 

エラーメッセージの表示

<h1>お問い合わせ入力フォーム(Inquiry#index)</h1>
<p>Find me in app/views/inquiry/index.html.erb</p>
<div>
  <!--
  例外発生時
  -->
  <% if @inquiry.errors.any? %>
    <div id="error_explanation">
      <h2>入力項目を確認してください。</h2>
      <ul>
      <% @inquiry.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>
  ... 中略 ...
</div>

 

エラーメッセージの日本語化 

日本語化の手順はこちらを参考にして設定しております。ありがとうございます。

qiita.com

 

感想と課題

バリデーション自体の組み込み作業は難しくないと思います。

ただ、様々な状況を想定して使えるようになっているので全ての使用を把握するのが大変だと思います。

あと、エラーメッセージの差し替え方法と自作バリデーションはいつの日か必ず要求される事になるので予習しておきたい課題です。

 

ざっとですがバリデーションはこの辺にして、次回はいよいよDB書き込みに行きたいと思います。

 

以上、最後まで読んでいただきありがとうございます。