Webhook経由でStripeからアプリの記録に成功しています。これは、Stripe Webhooksに関するChris OliverのGoRailsディスカッションに基づいています。私はKoudokuの宝石を使ってStripeの機能性を確立しています。チャージテーブルにJSONオブジェクトをロードしようとするとエラーが発生します。ここでストライプNoMethodError:未定義メソッド `charges 'for nil:Rails ConsoleのNilClass
は、私がイベントを記録しようとしたときに発生するエラーです:私のアプリでは
RecordCharges.new.call(event)
Subscription Load (0.3ms) SELECT "subscriptions".* FROM "subscriptions" WHERE "subscriptions"."stripe_id" = ? LIMIT 1 [["stripe_id", "cus_withheldforexample"]]
NoMethodError: undefined method `charges' for nil:NilClass
を、ユーザーが1つのサブスクリプションを持っています。定期購入には多くの請求があります。料金はサブスクリプションに属します。ここで
は、スキーマです:
create_table "charges", force: :cascade do |t|
t.string "stripe_id"
t.string "amount"
t.string "card_last4"
t.string "card_type"
t.string "card_exp_month"
t.string "card_exp_year"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.integer "subscription_id"
end
create_table "subscriptions", force: :cascade do |t|
t.string "stripe_id"
t.integer "plan_id"
t.string "last_four"
t.integer "coupon_id"
t.string "card_type"
t.float "current_price"
t.integer "user_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
マイStripe.rbファイル
class RecordCharges
def call(event)
charge = event.data.object
subscription = Subscription.find_by(stripe_id: charge.customer)
subscription.charges.create(
stripe_id: charge.id,
amount: charge.amount,
card_last4: charge.source.last4,
card_type: charge.source.brand,
card_exp_month: charge.source.exp_month,
card_exp_year: charge.source.exp_year
)
end
end
StripeEvent.configure do |events|
events.subscribe 'charge.succeeded', RecordCharges.new
end
任意の提案ですか?ありがとう!
'subscription'はnilを返します。ですから、おそらく 'find_by! 'にして、' ActiveRecord :: RecordNotFound'エラーを発生させてそれを救済します。料金には顧客がいますか? –