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

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

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

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

Ruby

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

Q&A

0回答

3228閲覧

railsでアイテム詳細から(アイテムを管理するコントローラーとは別のコントローラーにデータを渡して)購入処理を実装したい

zendendo

総合スコア43

Ruby on Rails 5

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

Ruby

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

0グッド

1クリップ

投稿2018/06/06 07:54

編集2022/01/12 10:55

###前提・実現したいこと
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)

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問