ECサイトを作っています。
Pay.jpを用いて決済機能をつけました。
モデルは、Userモデル、Productモデル、Orderモデルの3つです。
Productコントローラのpayアクションで、決済処理+オーダ情報作成(Orderモデル作成)の2つの処理を施しました。
決済処理のみのときはうまくいっていたのですが、Order.newの処理を書くとエラーが起きてしまいます。
他のコントローラから他のモデルを作成するのはできないのでしょうか?
できない場合、決済処理後にOrderモデルを作成させるにはどのようにするのがベターでしょうか?
↓エラーメッセージ (「そんなモデルないよ」みたいな怒られ方をしています。)
↓http://localhost:3000/products/23/pay
uninitialized constant ProductsController::Order
↓product_controller.rb 決済処理+Orderモデル作成 処理
rails
1 def pay 2 @product = Product.find_by(id: params[:id]) 3 Payjp.api_key = ENV['PAYJP_PRIVATE_KEY'] 4 Payjp::Charge.create( 5 :amount => @product.price, 6 :card => params['payjp-token'], 7 :currency => 'jpy' 8 ) 9 @order = Order.new( 10 user_id: current_user.id, 11 product_id: params[:product_id] 12 ) 13 @order.save 14 redirect_to root_path, notice:'購入しました' 15 end
↓buy.html.erb 決済画面です。
rails
1<%= form_with local: true, url: "/products/#{@product.id}/pay" do |form| %> 2 <script 3 type="text/javascript" 4 src="https://checkout.pay.jp" 5 class="payjp-button" 6 data-key= "<%= ENV["PAYJP_ACCESS_KEY"] %>"> 7 </script> 8<% end %>
↓Orderモデル マイグレーションファイル user_idカラムとproduct_idカラムの2つのカラムをもっています。
class CreateOders < ActiveRecord::Migration[5.2] def change create_table :oders do |t| t.integer :user_id t.integer :product_id t.timestamps end end end
↓Orderモデル app/models/order.rb
class Oder < ApplicationRecord validates :user_id, {presence: true} validates :product_id, {presence: true} end
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/29 10:55 編集
2020/06/29 11:00
2020/06/29 11:04