2016-04-12 7 views
1

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 

任意の提案ですか?ありがとう!

+1

'subscription'はnilを返します。ですから、おそらく 'find_by! 'にして、' ActiveRecord :: RecordNotFound'エラーを発生させてそれを救済します。料金には顧客がいますか? –

答えて

0

Subscription.find_by(stripe_id: charge.customer)が戻ってきません。 chargecustomerがなく、stripe_idSubscriptionが指定されていないかのいずれかです。

を実行すると、アプリが適切なエラーを発生させ、アプリが正しく設定されていれば、プロダクションで404が表示されます。

+0

私はもはや存在しなかったサブスクリプションに対応するStripeイベントを使用していました。私はこれを試していたユーザーを最後に作成して以来、データベースをリセットしました。新しいサブスクリプションで新しいユーザーを作成すると、そのイベントは正常にデータベースに保存されました。ありがとう! –

+0

助けてくれてありがとう! –