ruby-on-rails - 如何使用 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
我试过这样。但这行不通。
解决方案
您的问题是您没有在查询中使用运算符。例如: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
如果有额外的引号,我觉得提交的任何内容都是错误的。
推荐阅读
- redux - 未记忆具有动态参数的选择器
- node.js - 无法安装 ffmpeg 模块
- android - Firebase 回收器适配器无法正常工作
- android - Xamarin 表单标签/StackLayout 旋转问题
- c# - 将项目添加到通用 observablecollection
- ios - React Native 构建错误:未找到 GeneratedInfoPlistDotEnv.h' 文件
- python - 对列表进行平方,然后将整个内容修改为一个空列表
- php - Symfony 维护文件上传的相对路径
- java - 从片段中 ListView 中的按钮创建 PopupView
- javascript - MongoDB 计数超过 2 个集合