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>
エラーメッセージの日本語化
日本語化の手順はこちらを参考にして設定しております。ありがとうございます。
感想と課題
バリデーション自体の組み込み作業は難しくないと思います。
ただ、様々な状況を想定して使えるようになっているので全ての使用を把握するのが大変だと思います。
あと、エラーメッセージの差し替え方法と自作バリデーションはいつの日か必ず要求される事になるので予習しておきたい課題です。
ざっとですがバリデーションはこの辺にして、次回はいよいよDB書き込みに行きたいと思います。
以上、最後まで読んでいただきありがとうございます。