Stripe NoMethodError: undefined method `charges' for nil:NilClass in Rails Console
Stripe NoMethodError: undefined method `charges' for nil:NilClass in Rails Console
我正在尝试让我的应用通过 Webhook 记录来自 Stripe 的成功扣款。这是基于 Chris Oliver 关于 Stripe Webhooks 的 GoRails 讨论。我正在使用 Koudoku gem 来建立 Stripe 功能。当我尝试将 JSON 对象加载到费用表中时,我 运行 遇到了错误。
这是我尝试记录事件时出现的错误:
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
在我的应用中,用户有一个订阅。订阅有很多费用。费用属于订阅。
架构如下:
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.find_by(stripe_id: charge.customer)
归零。要么你的 charge
没有 customer
and/or 你没有 Subscription
那 stripe_id
.
如果您执行 find_by!
,您的应用将引发适当的错误,如果您的应用设置正确,它将在生产中出现 404。
我正在尝试让我的应用通过 Webhook 记录来自 Stripe 的成功扣款。这是基于 Chris Oliver 关于 Stripe Webhooks 的 GoRails 讨论。我正在使用 Koudoku gem 来建立 Stripe 功能。当我尝试将 JSON 对象加载到费用表中时,我 运行 遇到了错误。
这是我尝试记录事件时出现的错误:
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
在我的应用中,用户有一个订阅。订阅有很多费用。费用属于订阅。
架构如下:
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.find_by(stripe_id: charge.customer)
归零。要么你的 charge
没有 customer
and/or 你没有 Subscription
那 stripe_id
.
如果您执行 find_by!
,您的应用将引发适当的错误,如果您的应用设置正确,它将在生产中出现 404。