使用续集直接调用查询时出现ArgumentError

时间:2019-04-30 01:28:30

标签: ruby-on-rails ruby-on-rails-4 cassandra 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的数组。不知道该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要在此处使用语法:

DELETE FROM #{table_name} WHERE thread_id = ? AND user_id in ?

在这种情况下,完整列表将由驱动程序替换为in,而在您的变体中,您正在传递由一个元素组成的IN-这是有效的语法,您只需要传递整数值而不是整数列表。