我正在使用Stripe开发支付系统。 我必须在收到条纹网钩后搜索客户。但是会出现以下错误。
ActiveRecord :: StatementInvalid(SQLite3 :: SQLException:在“'cus_xxxxx'附近”:语法错误:选择“用户”。*从“用户”位置(stripe_customer_id'cus_xxxxx')排序“用户”。“ id” ASC LIMIT?):
有cus_xxxxx
个客户。但是我必须从中删除单引号...
@user = User.where('stripe_customer_id ?', "#{source['customer'].gsub("'", "")}").first
我已经尝试过了。但这是行不通的。
答案 0 :(得分:1)
您的问题是您在查询中没有使用运算符。例如: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
的东西都是错的。