在 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)
我有以下代码:
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)