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

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

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

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

Ruby on Rails

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

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

Q&A

解決済

1回答

915閲覧

コントローラでparam is missing or the value is emptyのエラーになる

pecchan

総合スコア592

Ruby on Rails 6

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

Ruby on Rails

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

パラメータ

関数やプログラム実行時に与える設定値をパラメータと呼びます。

0グッド

0クリップ

投稿2021/04/25 04:07

編集2021/04/25 04:07

以下を参考にお問合せページを作っているところです。
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

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

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

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

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

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

guest

回答1

0

自己解決

confirm.html.erbで
<%= f.hidden_field :email %>
が抜けてました。

お騒がせしました。

投稿2021/04/25 04:49

pecchan

総合スコア592

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問