Rails SQL查询,将id数组传递给sql WHERE ... IN子句

时间:2016-04-19 00:03:36

标签: mysql ruby-on-rails

处理HABTM关系并需要编写一个我可以通过ActiveRecord::Base.connection.execute(my_query)运行的SQL查询字符串

SQL WHERE ... IN子句需要一个整数id数组,如下所示:"DELETE from contacts_tags where tag_id = 99 AND contact_id IN (1, 2, 3, 4)

我有一个我要传递给IN子句的ID数组,但似乎无法以SQL接受的方式对其进行格式化。

ids_for_delete = [1, 2, 3, 4]
my_query = "DELETE from contacts_tags where tag_id = 99 AND contact_id IN (#{ids_for_delete})"
ActiveRecord::Base.connection.execute(my_query) 
    #=> There is an error in your SQL syntax.

将一组id传递给SQL WHERE子句的正确方法是什么?

2 个答案:

答案 0 :(得分:9)

尝试:

my_query = "DELETE from contacts_tags where tag_id = 99 AND contact_id IN (#{ids_for_delete.join(', ')})"

使用方法join生成类似" 1,2,3,4 ..."

的字符串

答案 1 :(得分:0)

您还可以对数组值使用 ANY 操作:

DELETE FROM contacts_tags WHERE tag_id = 99 AND contact_id = ANY('{ #{ids_for_delete.join(",")} }'::int[])

即使传递空数组也不会中断。