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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

792閲覧

ActionController::ParameterMissing in ContactMailsController#create エラーがでる

ty_tech

総合スコア1

Ruby on Rails 6

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

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/10 13:11

編集2020/08/11 05:57

実現させたいこと

ActionController::ParameterMissing in ContactMailsController#createエラーを解決してcreate画面を表示させたい

プログラミング初心者で、基礎的な部分なのかと思いお恥ずかしいのですが、ご教示頂きたいです。

【routes.rb】

resources :contact_mails, only: [:new, :create] get '/contact_mails', to: 'contact_mails#create'

【contact_mails_controller.rb】

class ContactMailsController < ApplicationController def new @contact = ContactMail.new end def create @contact = ContactMail.new(contact_params) if @contact.save ContactMailer.contact_mail(@contact).deliver redirect_to contact_mails_path(@contact), notice: "お問い合わせを受け付けました。" else redirect_to new_contact_mail_path, alert: "入力に不備があります。" end end private def contact_params params.require(:contact_mail).permit(:name, :email, :subject, :message) end end

【new.html.erb】

<section id="contact_mails"> <h5>お問い合わせフォーム</h5><br><br> <%= form_with model: @contact, url: contact_mails_path, html: {method: :post} do |f| %> <form> <div class="form-group"> <label>お名前 <span class="label label-danger">必須</span></label> <input type="text" class="form-control" placeholder="(例) ○○ 太朗"name="contact_mail[name]" required> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> <div class="help-block with-errors"></div> </div> <br> <div class="form-group"> <label>返信先メールアドレス <span class="label label-danger">必須</span></label> <input type="email" class="form-control" placeholder="(例) xxxxxx@gmail.com" name="contact_mail[email]" required> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> <div class="help-block with-errors"></div> </div> <br> <div class="form-group"> <label>件名 </label> <input type="text" class="form-control" placeholder="(例) ○○について"name="contact_mail[subject]"> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> <div class="help-block with-errors"></div> </div> <br> <div class="form-group"> <label>お問い合わせ内容 <span class="label label-danger">必須</span></label> <textarea placeholder="お問い合わせ内容" rows="7" class="form-control" name="contact_mail[message]" required></textarea> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> <div class="help-block with-errors"></div> </div> <div class="col text-center"> <button type="submit" class="btn btn-primary btn-lg w-25">送信</button> </div> </form> <% end %> </section>

【create.html.erb】

<section id="contact_mails"> <h5>問い合わせ完了画面</h5><br> <p> お問い合わせありがとうございます。<br> 問い合わせ内容は管理者宛にメールで通知しました。<br> </p> <br><br> <h5>問い合わせ内容</h5> <p> ------------------------------------------------<br> <br> 【件名】<br> <%= @contact.subject %> <br><br> 【お問い合わせ内容】<br> <%= @contact.message %> <br><br> 【返信先】<br> <%= @contact.email<br> <br> ------------------------------------------------ </p> %> </section>

行ったこと

コントローラのcontact_params内を

def contact_params params.permit(:name, :email, :subject, :message) end

に変えてみるとエラーはでないものの、create画面が表示されずに、
入力に不備があります。と表示される状態です。

どこが原因なのかでしょうか。。。

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

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

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

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

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

guest

回答1

0

ベストアンサー

<%= form_with の内側の <form> </form> は削除してください。form_withが作る formと二重になるので良くない。
params.require(:contact_mail).permit() の contact_mail が違いそう

params.require(:contact).permit() で診てください。
それでだめなら :contacts それでもだめなら logにある Paramaters を見てください

投稿2020/08/11 06:03

winterboum

総合スコア23347

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

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

ty_tech

2020/08/11 06:34 編集

早速ご回答頂き、ありがとうございます。 ①二重になっている <form> </form> は削除しました。 ②`contact`と`contacts`のパターンの確認しました。 上記を行って動かしてみると、ブラウザ側はフリーズ状態でターミナルには下記が出ます。 ``` Completed 400 Bad Request in 1ms (ActiveRecord: 0.0ms | Allocations: 711) ActionController::ParameterMissing (param is missing or the value is empty: contact): app/controllers/contact_mails_controller.rb:20:in `contact_params' app/controllers/contact_mails_controller.rb:8:in `create' ``` binding.pryで止めてみました。 ``` 7: def create 8: binding.pry => 9: @contact = ContactMail.new(contact_params) 10: if @contact.save 11: ContactMailer.contact_mail(@contact).deliver 12: redirect_to contact_mails_path(@contact), notice: "お問い合わせを受け付けました。" 13: else 14: redirect_to new_contact_mail_path, alert: "入力に不備があります。" 15: end 16: end [1] pry(#<ContactMailsController>)> @contact = ContactMail.new(contact_params) ActionController::ParameterMissing: param is missing or the value is empty: contact from /Users/tanahashiyasuhiro/.rbenv/versions/2.6.3/lib/ruby/gems/2.6.0/gems/actionpack-6.0.3.2/lib/action_controller/metal/strong_parameters.rb:462:in `require' ``` なにがいけないんでしょうか。。。汗
ty_tech

2020/08/11 07:18

やはり、ActionController::ParameterMissing in ContactMailsController#createで param is missing or the value is empty: contact_mailエラーが出てしまいます。引き続き調べてみます。。。
winterboum

2020/08/11 07:54

8: binding.pry ここのところで、 params を見てください
ty_tech

2020/08/11 08:52

このようになっています。 7: def create 8: binding.pry => 9: @contact = ContactMail.new(contact_params) 10: if @contact.save 11: ContactMailer.contact_mail(@contact).deliver 12: redirect_to contact_mails_path(@contact), notice: "お問い合わせを受け付けました。" 13: else 14: redirect_to new_contact_mail_path, alert: "入力に不備があります。" 15: end 16: end [1] pry(#<ContactMailsController>)> params => <ActionController::Parameters {"authenticity_token"=>"LVQV3ZEh082ED+QhFaMazp+6eyzZ2dftywsn2mAxxrNVA8yFSd3PzA7z6VVVc5Qq9WwZ2QtIob/PHrQ2qGQBmw==", "contact_mail"=>{"name"=>"太郎", "email"=>"hoge@gmail.com", "subject"=>"件名を書きました", "message"=>"お問い合わせを書きました"}, "controller"=>"contact_mails", "action"=>"create"} permitted: false> [2] pry(#<ContactMailsController>)>
ty_tech

2020/08/11 09:58

ビューファイルの記述が間違っていました。 下記訂正内容です。 <section id="contact_mails"> <h5>お問い合わせフォーム</h5><br><br> <%= form_with model: @contact, url: contact_mails_path, html: {method: :post} do |f| %> <div class="form-group"> <label>お名前 <span class="label label-danger">必須</span></label> <%= f.text_field :name, :class => "form-control", placeholder: "(例) ○○ 太朗", name: "contact_mail[name]", :required => true %> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> <div class="help-block with-errors"></div> </div> <br> <div class="form-group"> <label>返信先メールアドレス <span class="label label-danger">必須</span></label> <%= f.text_field :email, :class => "form-control", placeholder: "(例) xxxxxx@gmail.com", name: "contact_mail[email]", :required => true %> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> <div class="help-block with-errors"></div> </div> <br> <div class="form-group"> <label>件名 </label> <%= f.text_field :subject, :class => "form-control", placeholder: "(例) ○○について", name: "contact_mail[subject]" %> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> <div class="help-block with-errors"></div> </div> <br> <div class="form-group"> <label>お問い合わせ内容 <span class="label label-danger">必須</span></label> <%= f.text_area :message, :class => "form-control", placeholder: "お問い合わせ内容", rows: "7", name: "contact_mail[mesage]", :required => true %> <span class="glyphicon form-control-feedback" aria-hidden="true"></span> <div class="help-block with-errors"></div> </div> <div class="col text-center"> <%= f.submit "送信", class: "btn btn-primary btn-lg w-25" %> </div> <% end %> </section> ActionController::ParameterMissing in ContactMailsController#createエラーが出なくなりました! ありがとうございます! まだ、保存されなくてバリデーションに失敗していて `raise_validation_error'が出てしまいますので調べてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問