Sig*_*Sig 1 postgresql ruby-on-rails
在以 PG (10) 作为数据库的 Rails (5.2) 应用程序中,我需要执行原始 SQL 查询。
在查询中,我需要添加一个WHERE子句来检查qp.id其中是否project.qp_ids存储为字符串数组。
t.text :qp_ids, array: true, default: []
Run Code Online (Sandbox Code Playgroud)
我尝试了几种解决方案,其中以下
" ... 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(', ')})"
Run Code Online (Sandbox Code Playgroud)
但都产生一个PG::SyntaxError.
插入 PG 数组的正确方法是什么?
更新1
下面的代码可以工作,但非常难看,
" ... WHERE qp.id = IN (#{self.quality_process_ids.map {|id| "'#{id}'"}.join(',')})"
Run Code Online (Sandbox Code Playgroud)
使用起来不是IN更简单吗?
" ... WHERE qp.id IN (#{project.qp_ids.join(',')})"
Run Code Online (Sandbox Code Playgroud)
要处理字符串引用,可以直接使用 ActiveRecord 的清理功能
your_model_instance.sanitize_sql_array(["project.qp_ids IN (?)", project.qp_ids])
=> "project.qp_ids IN ('foo','bar')"
Run Code Online (Sandbox Code Playgroud)
生成您可以在子句中使用的条件WHERE。
| 归档时间: |
|
| 查看次数: |
1887 次 |
| 最近记录: |