解決したいこと
param is missing or the value is empty: order
をクリアしたいです。
まずエラー画面のパラメーターは
{"authenticity_token"=>"[FILTERED]", "payment_id"=>"1", "cart_item"=>"#<CartItem::ActiveRecord_AssociationRelation:0x00007fe432e98068>", "user_id"=>"1", "total"=>"50000", "commit"=>"オーダー", "format"=>"1"}
となっており必要なデータは送信できているように見えます。
どこかに重複データがあるのか、そもそも送信できていないのかわかりません。
送信画面
<%= form_with(model: @order, url: order_create_path(current_cart), local: true) do |f| %> <h2><%= "総額:#{@total}円" %></h2> <h2><%= "支払い方法" %></h2> <% if user_signed_in? && current_user.corporpriv.id == 1 %> <%= f.collection_select(:payment_id, Payment.all, :id, :name, {}, {class:"select-box", id:"order_payment"}) %> <% else %> <%= f.collection_select(:payment_id, Payment.all, :id, :name, {disabled: [2,3]}, {class:"select-box", id:"order_payment"}) %> <% end %> <%= hidden_field_tag :cart_item, @cart_items %> <%= hidden_field_tag :user_id, @user.id %> <%= hidden_field_tag :total, @sougakutotal %> <%= f.submit "オーダー"%> <% end %>
コントローラー(オーダーのクリエイトから)
def create @cart_items = current_cart.cart_items.includes([:item]) @total = @cart_items.inject(0) { |sum, item| sum + item.sum_of_total } @order = current_user.orders.new(order_params) @user = User.find(current_user.id) if @order.save @cart_items = current_user.cart_items.all @cart_items.each do |cart_item| @order.user_id = current_user.id @order.item_id = cart_item.item.id @order.rentalday = cart_item.rentalday @order.backday = cart_item.backday current_user.cart_items.destroy_all end else redirect_to my_cart_path end end private def order_params params.require(:order).permit(:sougakutotal, :payment_id, :rentalday, :backday, :user_id, :item_id) end end
cart_itemの中にはrentalday, :backday,:item_idのデータが入っています
追記
class OrdersController < ApplicationController def order @cart_items = current_cart.cart_items.includes([:item]) @cart = Cart.find(current_cart.id) @user = User.find(current_user.id) @order = Order.new @total = @cart_items.inject(0) { |sum, item| sum + item.sum_of_price } @warrantytotal = @cart_items.inject(0) { |sum, item| sum + item.sum_of_warranty } if @user.userrank.id == 1 @logwaritotal = @cart_items.inject(0) { |sum, item| sum + item.sum_of_price / 15 } elsif @user.userrank.id == 2 @logwaritotal = @cart_items.inject(0) { |sum, item| sum + item.sum_of_price / 10 } elsif @user.userrank.id == 3 @logwaritotal = @cart_items.inject(0) { |sum, item| sum + item.sum_of_price / 5 } else @logwaritotal = @cart_items.inject(0) { |sum, item| sum + item.sum_of_price * 0 } end @sougakutotal = @cart_items.inject(0) { |sum, item| sum + item.sum_of_sougaku - (@logwaritotal).to_i } end def create @order = Order.new(order_params) @cart_items = current_cart.cart_items.includes([:item]) @sougakutotal = @cart_items.inject(0) { |sum, item| sum + item.sum_of_sougaku } @order = current_user.orders.new(order_params) @user = User.find(current_user.id) if @order.save @cart_items = current_user.cart_items.all @cart_items.each do |cart_item| @order.user_id = current_user.id @order.rentalday = cart_item.rentalday @order.backday = cart_item.backday current_user.cart_items.destroy_all end else redirect_to mycart_path end end private def order_params params.permit(:sougakutotal, :payment_id, :user_id, cart_items_attributes:[:rentalday, :backday]) end end
自分で試したこと
データ送信ができていないのかなど確認しました
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/04 07:55
2022/02/04 12:03
2022/02/24 07:54 編集
2022/02/24 08:12