前提・実現したいこと
railsにて商品購入機能を実装しています
現在、クレジット購入時に商品に”購入者id”を付けるために試行錯誤しています
発生している問題・エラーメッセージ
該当のソースコード
purchase_controller.rb(購入用コントローラー) class PurchaseController < ApplicationController require 'payjp' def index @items = Item.all.includes(:images) 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', #日本円 ) @item.update_attribute(buyer_id: current_user.id) redirect_to action: 'done' #完了画面に移動 end end
createItems.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
試したこと
purchase_controller.rbに問題があるのは分かるのですがが
@item.update_attribute(buyer_id: current_user.id)
この一文の書き方が問題で
@buyer = @item.buyer_id
など試しているのですが、上手くいかずエラーになってしまいます
IDを作成するのに他に思い当たる記述はありませんか?
回答2件
あなたの回答
tips
プレビュー