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

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

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

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

Q&A

1回答

760閲覧

products_controllerで@teacherが表示されない

morimi714

総合スコア24

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/05/25 16:37

rails初心者です。
pay.jpで課金機能を作ったものの、購入後に@teacher.nameと@teacher.emailが表示されるようにしたいですのですが、うまく表示されません。

teacher_controllerの@teacher.nameと@teacher.emailとproducts_controllerでも使えるようにできていないからと推測はしているものの、エラーは出ていないので、どこに不備があるかわからない状態です。

routes.rb

#Pay.jpの機能 resources :teachers do resources :products do collection do post 'purchase' end end end

products_controller

class ProductsController < ApplicationController def index @teacher = Teacher.find_by(id: params[:id]) @teacher = Teacher.new(teacher_params) end def purchase @teacher = Teacher.find_by(id: params[:id]) @teacher = Teacher.new(teacher_params) Payjp.api_key = ENV["PAYJP_SECRET_KEY"] Payjp::Charge.create( :amount => 9800, :card => params['payjp-token'], :currency => 'jpy' ) end private def teacher_params params.permit(:name, :email) end end

teachers/show.html.erb

<%= link_to "この先生に相談する",teacher_products_path(@teacher),class:"waves-effect waves-light btn"%>

products/index.html.erb

<div class="payjp-purchase"> <p>この先生に連絡するには利用料が必要となります。</p> <%= form_tag(action: :purchase, method: :post) do %> <script type="text/javascript" src="https://checkout.pay.jp" class="payjp-button" data-key="<%= ENV["PAYJP_PUBLIC_KEY"] %>"></script> <% end %> <%= link_to "戻る", teachers_index_path %> </div>

products/purchase.html.erb

<div class="thanks"> <h6>支払いが完了しました。</h6> <div class="teacher-info"> <p><%= @teacher.name%>先生&emsp;<%= @teacher.email%></p>#これが表示されない </div> </div>

お力貸していただける方がいらっしゃれば、ご教授していただけると光栄です。

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

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

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

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

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

guest

回答1

0

purchaseメソッドの中で、

@teacher = Teacher.find_by(id: params[:id]) @teacher = Teacher.new(teacher_params)

@teacherに再代入をしていますね。
おそらく期待は最初の方の@teacherだと思いますが、
今回の場合、Teacher.newの結果を@teacherに再代入をしてしまっているため、
@teacherの値が上書きされ、表示結果が正しいものにならないのではと思います。

一度、

def purchase @teacher = Teacher.find_by(id: params[:id]) Payjp.api_key = ENV["PAYJP_SECRET_KEY"] Payjp::Charge.create( :amount => 9800, :card => params['payjp-token'], :currency => 'jpy' ) end

のみで試してみてはいかがでしょうか。
見当違い等ありましたらすみません。

※余談ですが、idカラムをもとにレコード検索をしたいときは、Teacher.find(params[:id])でも同じ結果になると思います。

投稿2019/06/11 06:26

uw9623

総合スコア16

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問