初歩的な質問恐れ入ります。
お問合せページを作っております。
入力項目はメールアドレスと本文のみ。
いずれも必須入力なので以下のようにしました。
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: お問合せ本文
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/25 10:18