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

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

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

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

Ruby on Rails

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

0回答

595閲覧

フォーム送信後のparam is missing or the value is emptyの解決方法

gakugaku_6

総合スコア0

Ruby

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

Ruby on Rails

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

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2020/12/10 03:54

編集2020/12/15 00:49

前提・実現したいこと

簡単なECサイトを作成中です。
Formオブジェクトで購入と住所のテーブルに保存しようとしています。
商品購入フォームで、subimtした際、エラーがでます。
入力欄への入力はしっかりと行っております。
解決方法をご教示いただけましたら幸いです。
不足情報あれば、ご指摘ください。

##発生している問題・エラーメッセージ
param is missing or the value is empty: address_order

def order_params           # ↓この部分 params.require(:address_order).permit(:postal_code, :city, :street, :house_name, :phone_number).merge(user_id: current_user.id, food_id: params[:food_id]) end

調べたこと

Googleで調べたところ、address_orderが無い又は空である。
・require(:address_order)があると保存はできるがそもそも商品購入フォームへいけなくなる(param is missing or the value is empty: address_orderとエラー)
・require(:address_order)が無いと商品購入フォームへ行けるがsubmit時に保存出来ない

##該当のソースコード
model

class AddressOrder include ActiveModel::Model attr_accessor :postal_code, :city, :street, :house_name, :phone_number, :user_id, :food_id # 省略 def save order = Order.create(food_id: food_id, user_id: user_id) Address.create(postal_code: postal_code, city: city, street: street, house_name: house_name, phone_number: phone_number) end end
class Address < ApplicationRecord belongs_to :order end
class Order < ApplicationRecord belongs_to :user belongs_to :food has_one :address end
class Food < ApplicationRecord belongs_to :user has_one_attached :image has_one :order # 省略 end

routes

Rails.application.routes.draw do devise_for :users root to: "foods#index" resources :foods do resources :orders, only: [:create, :index] end end

controller

class OrdersController < ApplicationController before_action :authenticate_user!, only: [:index] before_action :set_food, only: [:index, :create] def index @address_order = AddressOrder.new end def create @address_order = AddressOrder.new(order_params) if @address_order.valid? @address_order.save redirect_to root_path else render action: :index end end private def order_params params.require(:address_order).permit(:postal_code, :city, :street, :house_name, :phone_number).merge(user_id: current_user.id, food_id: params[:food_id]) end def set_food @food = Food.find(params[:food_id]) end end

view

<%= form_with model: @address_order, url: food_orders_path, local: true do |f| %> <%= f.text_field :postal_code, maxlength:"8" %> <%= f.text_field :city %> <%= f.text_field :street %> <%= f.text_field :house_name %> <%= f.text_field :phone_number, maxlength:"11"%> <%= f.submit "購入" %> <% end %>

log

Started GET "/foods/1" for ::1 at 2020-12-13 13:28:58 +0900 Processing by FoodsController#show as HTML Parameters: {"id"=>"1"} Food Load (0.4ms) SELECT `foods`.* FROM `foods` WHERE `foods`.`id` = 1 LIMIT 1 ↳ app/controllers/foods_controller.rb:56:in `set_food' Rendering foods/show.html.erb within layouts/application User Load (0.4ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 2 ORDER BY `users`.`id` ASC LIMIT 1 ↳ app/views/shared/_header.html.erb:15 Rendered shared/_header.html.erb (Duration: 4.7ms | Allocations: 2467) ActiveStorage::Attachment Load (0.4ms) SELECT `active_storage_attachments`.* FROM `active_storage_attachments` WHERE `active_storage_attachments`.`record_id` = 1 AND `active_storage_attachments`.`record_type` = 'Food' AND `active_storage_attachments`.`name` = 'image' LIMIT 1 ↳ app/views/foods/show.html.erb:11 ActiveStorage::Blob Load (0.3ms) SELECT `active_storage_blobs`.* FROM `active_storage_blobs` WHERE `active_storage_blobs`.`id` = 1 LIMIT 1 ↳ app/views/foods/show.html.erb:11 Rendered foods/show.html.erb within layouts/application (Duration: 9.5ms | Allocations: 4794) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 90ms (Views: 86.0ms | ActiveRecord: 1.5ms | Allocations: 25558) Started GET "/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhOMlF4YTJGaWFHYzFOR2czWjNoMU1XRXhkM0JtT0hkNGNUUnRlUVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpUTJsdWJHbHVaVHNnWm1sc1pXNWhiV1U5SW5SbGNtbDVZV3RwTG1wd1p5STdJR1pwYkdWdVlXMWxLajFWVkVZdE9DY25kR1Z5YVhsaGEya3VhbkJuQmpzR1ZEb1JZMjl1ZEdWdWRGOTBlWEJsU1NJUGFXMWhaMlV2YW5CbFp3WTdCbFE9IiwiZXhwIjoiMjAyMC0xMi0xM1QwNDozMTozNC43MTFaIiwicHVyIjoiYmxvYl9rZXkifX0=--aa418a0630aa9d3b3d01b135de8251b42140df17/teriyaki.jpg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22teriyaki.jpg%22%3B+filename%2A%3DUTF-8%27%27teriyaki.jpg" for ::1 at 2020-12-13 13:28:58 +0900 Processing by ActiveStorage::DiskController#show as JPEG Parameters: {"content_type"=>"image/jpeg", "disposition"=>"inline; filename=\"teriyaki.jpg\"; filename*=UTF-8''teriyaki.jpg", "encoded_key"=>"eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhOMlF4YTJGaWFHYzFOR2czWjNoMU1XRXhkM0JtT0hkNGNUUnRlUVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpUTJsdWJHbHVaVHNnWm1sc1pXNWhiV1U5SW5SbGNtbDVZV3RwTG1wd1p5STdJR1pwYkdWdVlXMWxLajFWVkVZdE9DY25kR1Z5YVhsaGEya3VhbkJuQmpzR1ZEb1JZMjl1ZEdWdWRGOTBlWEJsU1NJUGFXMWhaMlV2YW5CbFp3WTdCbFE9IiwiZXhwIjoiMjAyMC0xMi0xM1QwNDozMTozNC43MTFaIiwicHVyIjoiYmxvYl9rZXkifX0=--aa418a0630aa9d3b3d01b135de8251b42140df17", "filename"=>"teriyaki"} Completed 304 Not Modified in 2ms (ActiveRecord: 0.0ms | Allocations: 728) Started POST "/foods/1/orders" for ::1 at 2020-12-13 13:29:02 +0900 Processing by OrdersController#create as HTML Parameters: {"authenticity_token"=>"VgUl7/gmHxJZtJ0Nm4uuRp+MCFNYqE3o5Q+gXG6SzQCVDwNxbLnO4BbseoNR1L738ou63i7lt6TahMmTqTRJGg==", "food_id"=>"1"} Food Load (0.5ms) SELECT `foods`.* FROM `foods` WHERE `foods`.`id` = 1 LIMIT 1 ↳ app/controllers/orders_controller.rb:34:in `set_food' Completed 400 Bad Request in 5ms (ActiveRecord: 0.5ms | Allocations: 1634) ActionController::ParameterMissing (param is missing or the value is empty: address_order): app/controllers/orders_controller.rb:24:in `order_params' app/controllers/orders_controller.rb:11:in `create'

show.html.erb

# 省略 <% if user_signed_in? %> <% if current_user.id == @food.user_id %>  <%= link_to '商品の編集', edit_food_path(@food.id), method: :get, class: "food-btn" %> <%= link_to '削除', "/foods/#{@food.id}", method: :delete, class:'food-destroy' %> <% else %> <%= link_to '購入する',food_orders_path(@food.id), class:"food-btn", method: :post%> <% end %> <% end %> # 省略

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

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

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

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

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

winterboum

2020/12/10 04:08

ちらっと見では問題なさそう、、、 logにParamatersというのがあると思うので、それ載せてください
gakugaku_6

2020/12/10 04:58 編集

回答ありがとうございます! すみませんやり方がわかりません、、、
gakugaku_6

2020/12/10 05:10

【調べたこと】に今の状況の詳細を追加しました。 拙い表現で申し訳ありませんがご一読ください。
winterboum

2020/12/10 23:24

log/development.log というのがありませんか?
winterboum

2020/12/13 04:09

それだね、でもさ、TEXTで貼ってよ、コピペもできないし、右の肝心の所が切れてる。 そこのParamatersのところ、確認して。どういう構造になっているか。
gakugaku_6

2020/12/13 04:32 編集

申し訳ありません。
gakugaku_6

2020/12/13 04:34

追記いたしました。よろしくお願いします。
winterboum

2020/12/13 06:36

Started POST "/foods/1/orders"  は   <%= form_with model: @address_order, url: food_orders_path, のあるviewからのものですか? 違うように思える。 そのviewのpathを教えてください
winterboum

2020/12/13 07:32

そのpathではなく、そのviewのfileのpathです。app/viewsのどこのなんてfile?
gakugaku_6

2020/12/13 07:37

すみません。。。 app/views/orders の index.html.erb です!
winterboum

2020/12/13 12:10

??? 載っているviewはindexにみえないのですが。newとかeditだというのなら判るのですが。
gakugaku_6

2020/12/14 03:00

app/views/ordersにあるファイルがindexしかありません、、、
winterboum

2020/12/14 03:16

viewがindexであるとすると action index で @address_order を作って渡さねばなりません。それしていないですね
gakugaku_6

2020/12/14 05:09

orders_controller.rb の index アクションで @address_order = AddressOrder.new としているのですがこれでは誤りですか??
neko_daisuki

2020/12/14 20:36

ログを見ると foods#show から送信してますよね。 なので、app/views/foods/show.html.erbのフォームから送信されてるのではないですか? app/views/foods/show.html.erb を追記してください。
gakugaku_6

2020/12/15 00:50

回答ありがとうございます! 追記致しました。ご確認ください。
neko_daisuki

2020/12/15 01:03

購入するボタンを押すと以下のエラーが出るのですよね? param is missing or the value is empty: address_order パラメーターが何も指定されてないので当然そうなります。
gakugaku_6

2020/12/15 01:05

そうです! どのようにすればいいですか、、?
neko_daisuki

2020/12/15 01:22

Address に必要な :postal_code や :city をどこかから持ってくる必要があります。 たぶん User と紐付けられたのがあるのでしょう。 そうだとすると、create や AddressOrder を全面的に書き換える必要があります。 ここでこの問題を解決するよりも、基本的なところから学習をやり直した方が結果的に早いと思います。 どのアクションが呼ばれたらどのビューが呼ばれるとか、パラメーターの扱いとか。 そうしないと、また同じような問題で行き詰まると思います。
gakugaku_6

2020/12/15 01:25

わかりました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問