create後にshowアクションへ遷移させたい
rails初学者で、始めてteratailで質問させていただきます。失礼や説明に関して至らない点がありましたら申し訳ございません。
現在railsでスキルを販売できるアプリケーションを作成しており、
createアクションで取引をsaveした後に、showアクションへ行き出品者と購入者でチャットできる機能を実装したいと考えております。
showアクションのURLが/items/:item_id/transactions/:idとなっているので、
遷移先のpathをitem_transaction_path(@item,@transaction)としたところtransactionのidがないよと言われてしまい、この箇所が解決できずに止まってしまっている状態です。
実際paramsの中にtransactionのidがありません・・・。
発生している問題・エラーメッセージ
saveのあとでbinding.pryした際の@transactionの中身がこちらになります。
該当のソースコード
transactionコントローラー部分です。
トークン決済部分はjavascriptで処理しております。
ruby
1 class TransactionsController < ApplicationController 2 3 before_action :set_item, only:[:index, :create, :pay_item] 4 5 def index 6 if buyer_signed_in? 7 @transaction = DealTransaction.new 8 else 9 redirect_to new_buyer_registration_path 10 end 11 end 12 13 def create 14 @transaction = DealTransaction.new(transaction_params) 15 if @transaction.valid? 16 pay_item 17 @transaction.save 18 redirect_to item_transaction_path(@item, @transaction) 19 else 20 render :index 21 end 22 end 23 24 def show 25 @item = Item.find(params[:id]) 26 @transaction = Transaction.find(params[:id]) 27 end 28 29 private 30 31 def set_item 32 @item = Item.find(params[:item_id]) 33 end 34 35 def transaction_params 36 params.require(:deal_transaction).permit(:postal_code, :shipping_area_id, :city, :house_number, :building_name, :phone_number).merge(item_id: @item.id, buyer_id: current_buyer.id, token: params[:token]) 37 end 38 39 def pay_item 40 Payjp.api_key = ENV["PAYJP_SECRET_KEY"] 41 Payjp::Charge.create( 42 amount: @item.price, 43 card: params[:token], 44 currency: 'jpy' 45 ) 46 end 47 48end 49 50
DealTransactionの取引部分はformオブジェクトを使い、以下のようになっています。
ruby
1class DealTransaction 2 3 include ActiveModel::Model 4 attr_accessor :buyer_id, :item_id, :postal_code, :shipping_area_id, :city, :house_number, :building_name, :phone_number, :token 5 6 VALID_POSTAL_REGIX = /\A\d{3}[-]\d{4}\z/ 7 VALID_PHONE_REGIX = /\A\d{,11}\z/ 8 9 10 with_options presence: true do 11 validates :postal_code, format: { with: VALID_POSTAL_REGIX, message: "Input correctly"} 12 validates :shipping_area_id 13 validates :city 14 validates :house_number 15 validates :token 16 validates :phone_number, format: { with: VALID_PHONE_REGIX, message: "can't be blank"} 17 end 18 19 def save 20 deal = Deal.create(buyer_id: buyer_id, item_id: item_id) 21 22 Transaction.create(deal_id: deal.id, postal_code: postal_code, shipping_area_id: shipping_area_id, city: city, house_number: house_number, 23 building_name: building_name, phone_number: phone_number) 24 end 25 26 27end
このような場合、creeateからshowに遷移させるためには、どうすればいいのでしょうか・・・。
ご説明で、何か足りない箇所がありましたらご指示くださいませ。
初歩的なご質問で申し訳ござませんが、お知恵を貸していただけましたら幸いです。
回答1件
あなたの回答
tips
プレビュー