使用 cequel 直接调用查询时出现 ArgumentError
ArgumentError when calling directly a query with cequel
我刚刚将 cequel 从 1.10.0 更新到 3.2.1,我有以下模型:
module Messaging
class ThreadsForUser
include Cequel::Record
include Sunspot::Cequel
self.table_name = :messaging_threads_for_users
key :user_id, :bigint
key :thread_id, :timeuuid, order: :desc
我有以下查询(这在 1.1.0 中工作正常):
connection.execute(
"DELETE FROM #{table_name} WHERE thread_id = ? AND user_id in (?)",
thread_id, user_ids
)
但是对于 3.2.1,我收到了:
ArgumentError: argument for "user_id" must be bigint, [3] given
其中 user_ids
是一个数组,上面有一个 3。不知道如何解决这个问题,有什么想法吗?
您需要使用如下语法:
DELETE FROM #{table_name} WHERE thread_id = ? AND user_id in ?
在这种情况下,完整列表将由驱动程序替换为 in
,而在您的变体中,您传递的是包含一个元素的 IN
- 这是有效的语法,您只需要传递整数值而不是整数列表。
我刚刚将 cequel 从 1.10.0 更新到 3.2.1,我有以下模型:
module Messaging
class ThreadsForUser
include Cequel::Record
include Sunspot::Cequel
self.table_name = :messaging_threads_for_users
key :user_id, :bigint
key :thread_id, :timeuuid, order: :desc
我有以下查询(这在 1.1.0 中工作正常):
connection.execute(
"DELETE FROM #{table_name} WHERE thread_id = ? AND user_id in (?)",
thread_id, user_ids
)
但是对于 3.2.1,我收到了:
ArgumentError: argument for "user_id" must be bigint, [3] given
其中 user_ids
是一个数组,上面有一个 3。不知道如何解决这个问题,有什么想法吗?
您需要使用如下语法:
DELETE FROM #{table_name} WHERE thread_id = ? AND user_id in ?
在这种情况下,完整列表将由驱动程序替换为 in
,而在您的变体中,您传递的是包含一个元素的 IN
- 这是有效的语法,您只需要传递整数值而不是整数列表。