首页 > 解决方案 > 如何使用 Stripe 修复 StatementInvalid 错误

问题描述

我正在使用 Stripe 开发支付系统。收到条带 webhook 后,我必须搜索客户。但是会发生以下错误。


ActiveRecord::StatementInvalid (SQLite3::SQLException: 在 "'cus_xxxxx'" 附近: 语法错误: SELECT "users".* FROM "users" WHERE (stripe_customer_id 'cus_xxxxx') ORDER BY "users"."id" ASC LIMIT ?) :


cus_xxxxx存在的客户。但我必须从中删除单引号......

@user = User.where('stripe_customer_id ?', "#{source['customer'].gsub("'", "")}").first

我试过这样。但这行不通。

标签: ruby-on-railsstripe-payments

解决方案


您的问题是您没有在查询中使用运算符。例如:stripe_customer_id = ?stripe_customer_id IN (?)。但是有一个更好的方法来写这个。

@user = User.find_by({
  stripe_customer_id: source['customer'].delete("'")
})

find_by接受与 类似的参数where,但返回第一条记录。此外,哈希语法会根据提供的值自动在=IN或之间进行选择。IS NULL

此外,您可以使用该delete方法删除字符串中所有出现的字符串。基准测试表明它比 gsub 更快。对我来说很奇怪,您需要像这样修改字符串。source如果有额外的引号,我觉得提交的任何内容都是错误的。


推荐阅读