【发布时间】: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