在以PG(10(为数据库的Rails(5.2(应用程序中,我需要执行原始SQL查询。
在查询中,我需要添加一个WHERE
子句,用于检查qp.id
是否在存储为字符串数组的project.qp_ids
中。
t.text :qp_ids, array: true, default: []
我尝试了几种解决方案,其中包括以下
" ... WHERE qp.id = ANY #{project.qp_ids}"
" ... WHERE qp.id = ANY #{project.qp_ids.join(', ')}"
" ... WHERE qp.id = ANY ARRAY(#{project.qp_ids.join(', '))}"
" ... WHERE qp.id = IN (#{project.qp_ids.join(', ')})"
但都产生了PG::SyntaxError
.
插值PG数组的正确方法是什么?
UPDATE1
下面的代码有效,但非常丑陋,
" ... WHERE qp.id = IN (#{self.quality_process_ids.map {|id| "'#{id}'"}.join(',')})"
使用IN
不是更简单吗?
" ... WHERE qp.id IN (#{project.qp_ids.join(',')})"
要处理字符串引用,您可以直接使用ActiveRecord的清理
your_model_instance.sanitize_sql_array(["project.qp_ids IN (?)", project.qp_ids])
=> "project.qp_ids IN ('foo','bar')"
生成可在WHERE
子句中使用的条件。