前提・実現したいこと
ここに質問の内容を詳しく書いてください。
某スクール課題でRuby on railsを用いてケーキ屋さんのECサイト製作をしています。customer,adminで分けていて、customer側で注文をする際に注文確認画面(Orderモデル)というページがあり、そこで予めマイページから登録しておいた住所(Addressモデル)の情報を反映させたいのですが、うまく反映されません。
発生している問題・エラーメッセージ
エラーメッセージは出ないのですが、下記のように表示されてしまいます。 <h3>お届け先<%= @order.address %></h3> ↓ お届け先#<Address:0x0000000009b7d208>
該当のソースコード
以下、orders_controllerになります。
addressの方では問題なく住所を新規追加できているので問題ないと思います。
addressとorderのリレーションはないです。
OrdersController
1def new 2 @order = Order.new 3 @orders = current_customer.cart_items 4 @customer = Customer.find(current_customer.id) 5 @addresses = @customer.addresses 6 end 7 8def confirm_order 9 @orders = current_customer.orders 10 @cart_items = current_customer.cart_items 11 @sum = @cart_items.sum{|ci| ci.item.price * ci.amount} 12 @order = Order.new(order_params) 13 14 if params[:selected_address] == "radio1" 15 @order.address = current_customer.address 16 @order.postal_code = current_customer.postal_code 17 @order.name = current_customer.last_name + current_customer.first_name 18 elsif params[:selected_address] == "radio2" 19 @order.address = Address.find(params[:order][:address_for_order]) 20 else 21 @order.address = Order.new 22 @order.save 23 end 24 25 26def order_params 27 params.require(:order).permit( 28 :payment_method, 29 :postal_code, 30 :address, 31 :name, 32 :customer_id, 33 :freight, 34 :billing_amount, 35 :sales_order_status 36 ) 37 end 38 39 def order_item_params 40 params.require(:order_item).permit(:order_id, :item_id, :amount, :production_status, :price) 41 end 42 43 end
注文情報入力画面(new.html.erb)
<div class="row"> <h2>注文情報入力</h2> <div class="col-xs-6" style="margin-top: 50px;"> <%= form_with model: @order, url: orders_confirm_order_path, method: :get, local: true do |f| %> <table class="table"> <tbody> <tr> <th scope="row">支払方法</th> <td> <div class="radio"> <%= f.radio_button :payment_method, "0" %> <label class="payment-label">クレジットカード</label> <%= f.radio_button :payment_method, "1" %> <label class="payment-label">銀行振込</label> </div> </td> </tr> <tr> <th scope="row">お届け先</th> <td> <div class="radio"> <%= radio_button_tag(:selected_address, :radio1) %> <%= label_tag(:selected_address, "ご自身の住所") %> <p><%= @customer.postal_code %><%= @customer.address %></p> <p><%= @customer.first_name %><%= @customer.last_name %></p> </div> <div class="radio"> <%= radio_button_tag(:selected_address, :radio2) %> <%= label_tag(:selected_address, "登録済住所から選択") %> <p> <!--ここの記述がうまくいきません--> <%= f.collection_select :address_for_order, @addresses, :id, :address %> </p> </div> <%= radio_button_tag(:selected_address, :radio3) %> <%= label_tag(:selected_address, "新しいお届け先") %> <div class="field"> <label class="postal-code-label">郵便番号(ハイフンなし)</label> <%= f.text_field :postal_code, autofocus: true, class:""%> </div> <div class="field"> <label class="address-label">住所</label> <%= f.text_field :address, autofocus: true, class:"", size:"60*60"%> </div> <div class="field"> <label class="address-label">宛名</label> <%= f.text_field :name, autofocus: true, class:"", size:"30*30" %> </div> </td> </tr> </tbody> </table> <div class="col-xs-offset-5"> <!--submit--> <%= f.submit "注文確認画面に進む", class:"btn btn-primary" %> </div> <% end %> </div> </div>
注文情報確認画面(confirm.html.erb)
<h2>注文情報確認</h2> <div class="row"> <div class="col-md-7"> <table class="table"> <thead> <tr> <th scope="col">商品名</th> <th scope="col">単価(税込)</th> <th scope="col">数量</th> <th scope="col">小計</th> </tr> </thead> <tbody> <% @cart_items.each do |cart_item| %> <tr> <th scope="row"><%= attachment_image_tag(cart_item.item, :image,size: "300x217", fallback: "no_image.jpg") %><%= cart_item.item.name %></th> <td><%= cart_item.item.price %></td> <td><%= cart_item.amount %></td> <td><%= cart_item.item.price * 1.1 * cart_item.amount.to_i %></td> </tr> <% end %> </tbody> </table> </div> <div class="col-md-5"> <table class="table"> <tbody> <tr> <td>送料</td> <td><%= 800 %></td> </tr> <tr> <td>商品合計</td> <td><%= @sum %></td> </tr> <tr> <td>請求合計</td> <td><%= @sum + 800 %></td> </tr> </tbody> </table> </div> </div> </div> <h3>支払方法<%= (@order.payment_method == 0) ? "クレジットカード" : "銀行振り込み" %></h3> <h3>お届け先<%= @order.address %></h3> <%= form_with model: @order, url: orders_path, method: :post, local: true do |f| %> <!--create確認用--> <%= f.hidden_field :customer_id %> <%= f.hidden_field :postal_code %> <%= f.hidden_field :address %> <%= f.hidden_field :name %> <%= f.hidden_field :freight %> <%= f.hidden_field :billing_amount, :value => @sum+800 %> <%= f.hidden_field :payment_method %> <%= f.submit "注文を確定する", class:"btn btn-success col-md-3" %> <% end %>
試したこと
最初はcontrollerのconfirmアクションのelsif部分で@address = @order.addressと記述していましたが
Parameters: {"utf8"=>"✓", "order"=>{"payment_method"=>"0", "address_for_order"=>"3", "postal_code"=>"", "address"=>"", "name"=>""}, "selected_address"=>"radio2", "commit"=>"注文確認画面に進む"}
となり、パラメータに値が代入されませんでした。
注文情報入力画面では、3つのラジオボタンを用いて住所を表すようになっております。
会員情報のデータをそのまま持ってくるradio0ではうまくいきますが、Addressモデルに追加されている情報(複数をプルダウンで表示)を引っ張ってくるradio1と新規フォームで住所を反映させるradio2がうまくいかず、ページ頭のような表示になります。
どなたかご教示いただけると幸いです。
補足情報(FW/ツールのバージョンなど)
ruby '2.6.3'
gem 'rails', '~> 5.2.5'
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/20 04:37
2021/06/20 07:49
2021/06/20 08:54
2021/06/20 12:35