【问题标题】:Integer list as query clause param整数列表作为查询子句参数
【发布时间】:2018-05-19 13:13:37
【问题描述】:

我有一个可以查询 postgresql 的 ruby​​ 应用程序,但我的参数列表有问题。我有一些我需要在数据库中搜索的 ID。

我得到的错误是关于字符串/整数参数类型。 postgresql如何正确设置查询参数?

ActionView::Template::Error (PG::InvalidTextRepresentation: ERROR:  invalid input syntax for integer: "91,147,149,150,152,140,160,121,125,161"
LINE 1: ...= '2018-05-19 21:59:59.999999') AND (items.id IN ('91,147,14...
                                                             ^
: SELECT "items".* FROM "items" INNER JOIN taggings ON taggings.taggable_id = items.id INNER JOIN tags on taggings.tag_id = tags.id WHERE "items"."venue_id" = $1 AND "items"."is_active" = $2 AND "items"."category_id" IN (SELECT "categories"."id" FROM "categories" INNER JOIN "report_categories" ON "categories"."id" = "report_categories"."category_id" WHERE "report_categories"."report_id" = $3) AND ("items"."state" IN ('queued','published','archived')) AND (found_at >= '2018-05-01') AND (found_at <= '2018-05-19 21:59:59.999999') AND (items.id IN ('91,147,149,150,152,140,160,121,125,161'))):

您可以注意到错误显示的位置是items.id IN ('91,147,149,150,152,140,160,121,125,161'))

if report_tags
  tolist = JSON.parse(report_tags).join(',').gsub(/"/, '').sub!(/^,/, '')
  scoped = scoped.joins("INNER JOIN taggings ON taggings.taggable_id = items.id INNER JOIN tags on taggings.tag_id = tags.id").where("items.id IN (?)",  tolist)
end

感谢 Harald,我只需要稍微更新一下它就可以完美运行!

if report_tags
  tolist = JSON.parse(report_tags).reject { |e| e.to_s.empty? }
  scoped = scoped.
    joins("INNER JOIN taggings ON taggings.taggable_id = items.id INNER JOIN tags on taggings.tag_id = tags.id").
    where("tags.id IN (?)", tolist)
end

【问题讨论】:

  • 去掉('91,147,149,150,152,140,160,121,125,161')中的单引号。这些使列表中的单个字符串。

标签: sql ruby-on-rails ruby postgresql parameters


【解决方案1】:

试试

if report_tags
  tolist = JSON.parse(report_tags)
  scoped = scoped.
    joins("INNER JOIN taggings ON taggings.taggable_id = items.id INNER JOIN tags on taggings.tag_id = tags.id").
    where(id: tolist)
end

【讨论】:

  • hmm 在我设置到查询中的变量中没有单引号,但不知何故它们出现在运行查询中
  • 您能否在问题中包含生成查询的代码?可能是其中的一些引用逻辑。
  • 非常感谢@Harald。我刚刚更新了一点,它可以工作了!
猜你喜欢
  • 2022-08-17
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 2022-01-01
  • 2022-01-23
相关资源
最近更新 更多