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

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

ただいまの
回答率

90.81%

  • Ruby

    6579questions

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

  • Ruby on Rails 5

    961questions

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 75

zendendo

score 23

前提・実現したいこと

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
「??????」にしている部分が分からなくて困っている部分です。

class BuyOrdersController < ApplicationController

    def new
        @buy_order = BuyOrder.new
    end

    def create
        begin
            ActiveRecord::Base.transaction{
                @buy_order = BuyOrder.new
                @buy_order.buyer_user_id = current_user.id
                @buy_order.seller_user_id = ?????????
                #中略@buy_order.fee =
                #中略@buy_order.sub_total =
                #中略@buy_order.total_amount =
                @buy_order.save!


                @buy_order.buy_order_details.build(
                    item_stock_id: ???????,
                    quantity: ???????????,
                    )
                @buy_order.save!

            }
            redirect_to root_path, notice: '購入しました'
        rescue => e
            flash[:notice] = "購入に失敗しました。リトライしてみてください"
            render "show"
        end

    end

end


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)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

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

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

  • ただいまの回答率 90.81%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    6579questions

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

  • Ruby on Rails 5

    961questions

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