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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

1209閲覧

railsでcreateからshowへ遷移させたい・・・

miki623

総合スコア5

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2020/09/17 03:21

編集2020/09/17 04:34

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に遷移させるためには、どうすればいいのでしょうか・・・。
ご説明で、何か足りない箇所がありましたらご指示くださいませ。
初歩的なご質問で申し訳ござませんが、お知恵を貸していただけましたら幸いです。

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

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

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

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

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

maisumakun

2020/09/17 03:46

エラーのでた行の直前の@transaction.saveは無事成功していますか?
miki623

2020/09/17 04:11

ご返信有り難うございます! はい、テーブルには保存されている状態です。
miki623

2020/09/17 04:35

saveした後の@transactionの中身のターミナルの画像を追加いたしました! 何か原因になるような箇所はありますでしょうか・・・
maisumakun

2020/09/17 04:40

この@transactionのテーブルにid列はありますか?
miki623

2020/09/17 05:35

はい、idはあります! dealとtransactionのidカラムには同じ番号が入っております。
guest

回答1

0

ベストアンサー

@transaction とありますが実態は DealTransaction です。
このclassは attr_accessor をみると :id がありません。
それが原因でしょう。
attr_accessorに:idを加え、
save で Transaction.create の後にできたtranzactionのidをそれに入れたらよいかと思います。

投稿2020/09/20 13:26

winterboum

総合スコア23347

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

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

miki623

2020/09/24 13:46

ご丁寧に有り難うございました!! ご指摘いただいた通りにしたところ、思う動作をしてくれました。 わかりにくい初学者の説明だったにも関わらず、的確にご教示いただき有り難うございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問