質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

解決済

1回答

1016閲覧

メールアドレスのバリデーションでエラーメッセージの一部が抜ける

pecchan

総合スコア592

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

0クリップ

投稿2021/04/25 01:27

初歩的な質問恐れ入ります。

お問合せページを作っております。
入力項目はメールアドレスと本文のみ。
いずれも必須入力なので以下のようにしました。

validates :email, :presence => {:message => 'メールアドレスを入力してください'} validates :text, :presence => {:message => '本文を入力してください'}

次にメールアドレスへ、フォーマットのバリデーションを追加したところ、エラーメッセージから、「メールアドレス」という文言が抜けてしまいました。
イメージ説明

未入力の時は、ちゃんと以下のように抜けずに表示されます。
イメージ説明

どうすれば文言が抜けずに出力されるでしょうか?

先輩方教えて下さい。よろしくお願いします。

モデル

ruby

1class Inquiry 2 include ActiveModel::Model 3 4 attr_accessor :email, :text, :message 5 6 VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-]+(.[a-z\d\-]+)*.[a-z]+\z/i 7 validates :email, format: { with: VALID_EMAIL_REGEX }, if: ->(u) { u.email.present? } 8 validates :email, :presence => {:message => 'メールアドレスを入力してください'} 9 validates :text, :presence => {:message => '本文を入力してください'} 10 11end 12

ビュー

ruby

1<div class="content content-bgcolor"> 2 <div class="content__title"> 3 <% provide(:title, (t '.title')) %> 4 <h1 class="lv1-h"><%= t '.title' %></h1> 5 </div> 6 <!-- /. content__title --> 7 8 <div class="content__inner-1col"> 9 10 <%= form_for @inquiry, :url => inquiry_confirm_path do |f| %> 11 12 <div class="form__inner"> 13 <% if @inquiry.errors.any? %> 14 15 <p class="label label-danger">入力内容にエラーがあります</p> 16 <ul> 17 <% @inquiry.errors.each do |attr, msg| %> 18 <li><strong><%= msg %></strong></li> 19 <% end %> 20 </ul> 21 22 <% end %> 23 </div> 24 25 <div class="form__inner"> 26 <%= f.label :email, class:"label label-default fs14" %> 27 <%= f.email_field :email, class: 'input-text' %> 28 </div> 29 30 <div class="form__inner"> 31 <%= f.label :text, class:"label label-default fs14" %> 32 <%= f.text_area :text, class: 'input-text' %> 33 </div> 34 35 <div class="form__inner"> 36 <%= f.submit '確認', class: 'btn btn-primary btn-block' %> 37 </div> 38 39 <% end %> 40 41 </div> 42</div> 43

コントローラ

ruby

1class InquiryController < ApplicationController 2 def index 3 # 入力画面を表示 4 @inquiry = Inquiry.new 5 render :action => 'index' 6 end 7 8 def confirm 9 # 入力値のチェック 10 @inquiry = Inquiry.new(params[:inquiry].permit(:email, :text, :message)) 11 if @inquiry.valid? 12 # OK。確認画面を表示 13 render :action => 'confirm' 14 else 15 # NG。入力画面を再表示 16 render :action => 'index' 17 end 18 end 19 20 def thanks 21 # メール送信 22 @inquiry = Inquiry.new(params[:inquiry].permit(:email, :text, :message)) 23 InquiryMailer.received_email(@inquiry).deliver 24 25 # 完了画面を表示 26 render :action => 'thanks' 27 end 28end 29

model.ja.yml

yml

1ja: 2 activemodel: 3 models: 4 inquiry: お問合せ 5 attributes: 6 inquiry: 7 email: メールアドレス 8 text: お問合せ本文

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

rb

1validates :email, 2 format: { with: VALID_EMAIL_REGEX, allow_blank: true }, 3 presence: {message: 'を入力してください'}

のようにして,ビューでは

@inquiry.errors.each do |attr, msg|

@inquiry.errors.full_messages.each do |msg|

にするとどうでしょうか。

投稿2021/04/25 08:10

編集2021/04/25 08:16
scivola

総合スコア2108

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pecchan

2021/04/25 10:18

有難う御座います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問