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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

0回答

1137閲覧

param is missing or the value is emptyのエラーが解決できません。

_summer_sn

総合スコア2

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

1グッド

1クリップ

投稿2020/04/26 08:35

前提・実現したいこと

以前の続きです。
https://teratail.com/questions/256247

Railsで確認画面を表示するお問い合わせページを作成しています。
index(情報登録画面)→ confirm(内容確認画面)→ create(送信完了画面)
という流れで実装しております。

先日と少しコードを変えて実装してみたところ表題のエラーが出て躓いてしまったので、皆様のお力をお借りしたいです。
index→confirmへページ遷移する際にこのエラーが表示されます。

発生している問題・エラーメッセージ

ActionController::ParameterMissing in ContactsController#confirm param is missing or the value is empty: contact private def contact_params params.require(:contact).permit(:name, :email, :text) end end

該当のソースコード

contacts_controller.rb

ruby

1class ContactsController < ApplicationController 2 def index 3 @contact = Contact.new 4 end 5 6 def confirm 7 @contact = Contact.new(contact_params) 8 render :index if @contact.invalid? 9 end 10 11 def create 12 @contact = Contact.new(contact_params) 13 14 if params[:back] 15 render :index 16 return 17 end 18 19 if params[:post] 20 @contact.save 21 return 22 end 23 end 24 25 private 26 def contact_params 27 params.require(:contact).permit(:name, :email, :text) 28 end 29end 30

index.html.erb

erb

1<%= form_with model: @contact, local: true, url: {action: 'confirm'} do |form| %> 2 <h2>お問い合わせ</h2> 3 <%= form.label :name, "お名前" %> 4 <%= form.text_field :name, value: @contact.name, name: "name", class: "contact-input", placeholder:"〇〇 〇〇" %> 5 <%= form.label :email, "メールアドレス" %> 6 <%= form.text_field :email, value: @contact.email, name: "email", class: "contact-input",placeholder:"xxx@xxx.com" %> 7 <%= form.label :text, "お問い合わせ内容" %> 8 <%= form.text_area :text, value: @contact.text, name: "text", class: "contact-textarea", placeholder:"内容をご入力ください" %> 9 <%= form.submit "確認", class: "mod-button-02", id: "contact-submit" %> 10<% end %>

confirm.html.erb

erb

1<%= form_for @contact, url: contact_complete_path do |form| %> 2 <h2 class="mod-title-01">内容確認</h2> 3 <%= form.label :name, "お名前" %> 4 <%= @contact.name %> 5 <%= form.hidden_field :name, value: @contact.name, readonly: true %> 6 <%= form.label :email, "メールアドレス" %> 7 <%= @contact.email %> 8 <%= form.hidden_field :email, value: @contact.email, readonly: true %> 9 <%= form.label :text, "お問い合わせ内容" %></th> 10 <%= @contact.text %> 11 <%= form.hidden_field :text, value: @contact.text, readonly: true %> 12 <%= form.submit '戻る', name: 'back', class: "mod-button-01" %> 13 <%= form.submit '送信', name: 'post', class: "mod-button-02" %> 14<% end %>

試したこと

contacts_controller.rb

ruby

1class ContactsController < ApplicationController 2 3#~中略〜 4 5 private 6 def contact_params 7 params.permit(:name, :email, :text) 8 end 9end

のように、require(:contact)を外したところエラーは解決しますが、DBに情報が保存できません。

補足情報(FW/ツールのバージョンなど)

rails -v 5.2.1/ruby -v 2.5.1です。

DBに追加したカラムは以下の通りです。
t.string :name
t.string :email
t.text :text

その他必要な情報があれば教えてください。
よろしくお願いします!

chocolate24👍を押しています

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

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

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

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

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

chocolate24

2020/04/27 03:11

form_forとform_withが混在しているため、構造上わかりにくくなっています。どちらもform_withに揃えてみてはどうですか?
_summer_sn

2020/04/27 12:23 編集

confirm.html.erbを <%= form_with model: @contact, local: true, url: {action: 'create'} do |form| %> に変更いたしました!
chocolate24

2020/04/28 04:48

うまくいって良かったです!
_summer_sn

2020/05/01 11:59

ありがとうございました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問