Как исправить ошибку StatementInvalid с помощью Stripe - PullRequest
0 голосов
/ 23 марта 2019

Я работаю над платежной системой с Stripe. Я должен искать клиента после получения чека. Но эта ошибка происходит ниже.


ActiveRecord :: StatementInvalid (SQLite3 :: SQLException: рядом с "'cus_xxxxx'": синтаксическая ошибка: ВЫБЕРИТЕ "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

Я пытался так. Но это не сработает.

1 Ответ

1 голос
/ 23 марта 2019

Ваша проблема в том, что вы не используете оператор в запросе. Пример: stripe_customer_id = ? или stripe_customer_id IN (?). Но есть лучший способ написать это.

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

find_by принимает аргументы, аналогичные where, но возвращает первую запись. Кроме того, синтаксис Hash автоматически выбирает между =, IN или IS NULL в зависимости от предоставленного значения.

Кроме того, вы можете использовать метод delete, чтобы удалить все вхождения строки в строке. Тесты показывают, что это быстрее, чем gsub. Для меня странно, что вам нужно изменить строку, как это, хотя. Я чувствую, что все, что отправляет source делает неправильно, если есть дополнительные кавычки.

...