我对尝试使用Rails 4 / Activerecord进行的更新感到困惑。我正在使用的应用程序是使用Stripe来处理订阅,这个函数应该处理更新的订阅(条带customer.subscription.updated
事件):
# passing in a stripe webhook event object
# event.data.object.current_period_end = 1402100302
subscription = Subscription.find_by(stripe_id: event.data.object.id)
plan = Plan.find_by(stripe_name: event.data.object.plan.id)
subscription.update(expires_at: event.data.object.current_period_end, plan_id: plan.id)
这一切看起来很清楚,当我在rails控制台中执行各行时,我会获得subscription
,plan
等的有效数据。但是,update
不会按预期工作。以下是rails控制台中执行的查询显示的update
行:
SQL (0.7ms) UPDATE "subscriptions" SET "expires_at" = $1, "updated_at" = $2 WHERE "subscriptions"."id" = 23 [["expires_at", nil], ["updated_at", Wed, 07 May 2014 17:09:25 UTC +00:00]]
(15.9ms) COMMIT
=> true
expires_at
为nil
,第二个值plan.id
甚至不会传递给查询。我该如何处理此更新?
答案 0 :(得分:2)
看起来event.data.object.current_period_end
只需要像这样转换为Time
:
subscription.update(expires_at: Time.at(event.data.object.current_period_end), plan_id: plan.id)
这很令人困惑,因为在create_subscription
事件中我更新完全相同,通过webhook数据设置expires_at
,并使用相同的值/时间戳来设置expires_at
值。
看起来rails也足够智能,可以知道update
何时不会更改某个值 - 因此它会使其脱离查询。这是我与plan_id
混淆的一部分 - expires_at
日期已经改变,但计划没有 - 所以rails将更新语句的那部分从sql中删除。