前提・実現したいこと
findメソッドでidを取り出したい
Pey.jpを利用した購入機能を実装しています
現状ではひとつ購入してしまうと、他の商品も購入されてしまうため、下記の記述で商品idを取り出そうと試みたのですが、なぜかエラーが起きてしまいます
@item = Item.find(params[:id])
発生している問題・エラーメッセージ
該当のソースコード
purchase_controller(購入コントローラー) class PurchaseController < ApplicationController require 'payjp' def index @item = Item.find(params[:id]) @items = Item.all.includes(:images) @buyer = @items.update_all(buyer_id: current_user.id) card = Card.where(user_id: current_user.id).first #Cardテーブルは前回記事で作成、テーブルからpayjpの顧客IDを検索 if card.blank? #登録された情報がない場合にカード登録画面に移動 redirect_to controller: "card", action: "new" else Payjp.api_key = ENV["PAYJP_PRIVATE_KEY"] #保管した顧客IDでpayjpから情報取得 customer = Payjp::Customer.retrieve(card.customer_id) #保管したカードIDでpayjpから情報取得、カード情報表示のためインスタンス変数に代入 @default_card_information = customer.cards.retrieve(card.card_id) end end def pay card = Card.where(user_id: current_user.id).first Payjp.api_key = ENV['PAYJP_PRIVATE_KEY'] Payjp::Charge.create( :amount => 500, #支払金額を入力(itemテーブル等に紐づけても良い) :customer => card.customer_id, #顧客ID :currency => 'jpy', #日本円 ) redirect_to action: 'done' #完了画面に移動 end end
item.rb class CreateItems < ActiveRecord::Migration[5.2] def change create_table :items do |t| t.string :name, null: false, index: true t.integer :price, null: false t.text :description, null: false t.integer :condition t.integer :shipping_from, null: false t.integer :days_before_shipping, null: false t.integer :shipping_method, null: false t.integer :brand t.integer :category t.bigint :buyer_id t.references :user, null: false, index: true, foreign_key: true t.timestamps end end end
試したこと
@item = Item.find_by(params[:id])
@item = Item.where(params[:id])
上記の記述だと、他の商品も購入されてしまいます
ひとつだけの商品を取り出すために思い当たる原因などはありませんか?
回答2件
あなたの回答
tips
プレビュー