处理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子句的正确方法是什么?
答案 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[])
即使传递空数组也不会中断。