以下を参考にお問合せページを作っているところです。
Railsでお問合せ機能実装
入力画面でメールアドレスと問合せ本文を入力し、確認画面に遷移します。
確認画面で送信ボタンを押すと、送信できず以下のエラーが発生します。
ActionController::ParameterMissing in InquiryController#thanks param is missing or the value is empty: inquiry
ビューからコントローラへ(confirm.html.erb→nquiryController)パラメータがうまく渡っていないようなのですが、
その原因が分かりません。
関係あるか分かりませんが、気になる点があります。
問題の確認画面(confirm.html.erb)で右クリックして「ページのソースを表示」からhtmlを確認すると、cssやscriptばかりが出力され画面上のhtmlが確認できません。
先輩方どうすればエラー解消できるでしょうか?
教えて下さい。よろしくお願いします。
ビュー(入力画面)
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_with model: @inquiry, local: true, :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
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_with model: @inquiry, local: true, :url => inquiry_thanks_path do |f| %> 11 12 13 <div class="form__inner"> 14 <%= f.label :email, class:"label label-default fs14" %><br> 15 <%= @inquiry.email %> 16 </div> 17 18 <div class="form__inner"> 19 <%= f.label :text, class:"label label-default fs14" %> 20 <%= simple_format(@inquiry.text) %> 21 </div> 22 23 <div class="form__inner"> 24 <%= f.submit '送信', class: 'btn btn-primary btn-block' %> 25 </div> 26 27 <% end %> 28 29 </div> 30</div> 31 32
コントローラ
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(inquiry_params) 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(inquiry_params) 23 InquiryMailer.received_email(@inquiry).deliver 24 25 # 完了画面を表示 26 render :action => 'thanks' 27 end 28 29 private 30 def inquiry_params 31 params.require(:inquiry).permit(:email, :text, :message) 32 #params[:inquiry].permit(:email, :text, :message) 33 end 34 35end 36
モデル
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 10 11 12 validates :text, :presence => {:message => '本文を入力してください'} 13 14end 15
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。