Целочисленный список как параграф пункта запроса - PullRequest
0 голосов
/ 19 мая 2018

У меня есть приложение ruby ​​с запросом к postgresql, и у меня проблема со списком параметров.У меня есть номера идентификаторов, которые мне нужно искать в базе данных.

Ошибка, которую я получил о типе строки / целочисленного параметра.Как правильно установить параметры запроса для 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

Благодаря Харальду, мне просто нужно было немного обновить егонемного, и это прекрасно работает!

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

1 Ответ

0 голосов
/ 19 мая 2018

Попробуйте

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...