在 quoted_parameters(params) 中使用空参数

Using empty parameters in quoted_parameters(params)

我有以下代码:

pg = ActiveRecord::Base.connection
res = pg.execute(query % quoted_parameters(params))

这是我的伪查询:

select project_id from projects where client_id in (%{ids})

这是参数:

{ :ids => [] }

当 ids 数组中有实际值时,它工作正常。但是它似乎无法处理空数组,我得到:

ERROR:  syntax error at or near ")"

因为它只是放入一个空字符串。

默认情况下可以正常工作:

Project.where('client_id in (?)', [])

并生成以下查询:

Project Load (3.5ms)  SELECT "projects".* FROM "projects"  WHERE (client_id in (NULL))

有没有办法让查询 % quoted_parameters(params) 即使数组为空也能生成相同的查询?

澄清:您是否尝试在您的应用中手动使用 SQL?或者询问如何使用 AR 实现这一目标?

使用 ActiveRecord 你应该能够做到:

Project.where(client_id: ids)

这适用于多种情况:

Project.where(client_id: [])
=> SELECT "projects".* FROM "projects" WHERE 1=0

Project.where(client_id: [1])
=> SELECT "projects".* FROM "projects" WHERE "projects"."client_id" = 1

Project.where(client_id: [1, 2])
=> SELECT "projects".* FROM "projects" WHERE "projects"."client_id" IN (1, 2)