###前提・実現したいこと
ruby on railsでユーザー同士でアイテムを交換するフリマみたいな仲介サイトの
購入処理を実装しようとしています。
アイテム(商品)は、itemのMVCで管理しており、
買い注文(購入処理)は、buy_orderのMVCで管理しようと考えています。
実現したいことをもう少し具体的に言うと・・・
アイテムのshowページに「購入数量の入力フォーム」と「購入確定」ボタンを設置して、
ユーザーがこのボタンを押したら、
buy_orders_controllerのcreateアクションが動き、
買い注文をBuyOrderモデルに記録し、
同時に、
注文詳細をBuyOrderDetailモデルに記録したいと考えています。
購入確定の処理をするとき、
BuyOrderモデルでは、購入するアイテムを投稿したuser_id、
BuyOrderDetailモデルでは、購入したアイテムのidとフォーム入力してもらった購入数量
を記録したいのですが、
これら情報をbuy_orders_controller側のアクション(create)に受け渡すやり方が分からなくて困っています。
どうすればいいのか教えて頂ければ幸いです。
###現状
以下は現在のコードの状態です。
app/views/item_stocks.show.html.erb(アイテム詳細ページ、購入フォームのみ抜粋)
このコードで、購入ボタンを押すとbuy_orders_controllerのcreateアクションが動くようになっています。
<%= form_for(@exhibit_item.buy_order_details.build, url: buy_orders_path(@exhibit_item)) do |f| %> <div class="field"> <%= f.label :購入する数量 %> <%= f.number_field :quantity, min:1,max:99 %> </div> <%= f.button '購入する', class: 'btn-info btn-lg btn-block' %> <% end %>
app/controllers/buy_orders_controller.rb
「??????」にしている部分が分からなくて困っている部分です。
ruby
1class BuyOrdersController < ApplicationController 2 3 def new 4 @buy_order = BuyOrder.new 5 end 6 7 def create 8 begin 9 ActiveRecord::Base.transaction{ 10 @buy_order = BuyOrder.new 11 @buy_order.buyer_user_id = current_user.id 12 @buy_order.seller_user_id = ????????? 13 #中略@buy_order.fee = 14 #中略@buy_order.sub_total = 15 #中略@buy_order.total_amount = 16 @buy_order.save! 17 18 19 @buy_order.buy_order_details.build( 20 item_stock_id: ???????, 21 quantity: ???????????, 22 ) 23 @buy_order.save! 24 25 } 26 redirect_to root_path, notice: '購入しました' 27 rescue => e 28 flash[:notice] = "購入に失敗しました。リトライしてみてください" 29 render "show" 30 end 31 32 end 33 34end
routes.rb(関係のあるitemとbuy_orderのみ抜粋)
class BuyOrdersController < ApplicationController #アイテム関連(出品作成、作成保存、一覧、編集、詳細、更新、削除、) #item_stockにcollection(全てのデータを対象と)したmy_exhibit_indexを追加。 resources :item_stocks #買い注文関連 resources :buy_orders end
###補足情報(言語/FW/ツール等のバージョンなど)
Rails 5.1.3
ruby 2.4.1
devise (4.3.0)
あなたの回答
tips
プレビュー