ИЛИ условие в запросе - PullRequest
0 голосов
/ 02 мая 2018

Try делает следующий запрос:

title = "%#{params[:title]}%"
group = params[:group]

@foods = Food.order('visits_count DESC').where("title ILIKE ? OR group ILIKE ?", title, group).decorate

и в ответ я получаю следующую ошибку:

ActionView::Template::Error (PG::SyntaxError: ERROR:  syntax error at or near "group"
LINE 1: ..."foods".* FROM "foods" WHERE (title ILIKE '%%' OR group ILIK...
                                                             ^
: SELECT "foods".* FROM "foods" WHERE (title ILIKE '%%' OR group ILIKE '') ORDER BY visits_count DESC):

Есть идеи?

Ответы [ 2 ]

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

Поскольку это PostgreSQL, вам нужно заключать идентификаторы в кавычки, когда чувствительна к регистру проблема или вы используете ключевое слово в качестве идентификатора:

...where('title ILIKE ? OR "group" ILIKE ?', title, group)...

Вам лучше не использовать ключевое слово в качестве столбца IMO, чтобы вам не приходилось беспокоиться о подобных вещах. Я бы пошел с цитатой, а потом переименовал колонку как можно скорее, но это только я.

Пока я здесь, вы можете пропустить эти проверки, когда они не имеют смысла. Эта часть вашего запроса:

title ILIKE '%%'

всегда будет совпадать, если title не равно нулю, поэтому вы можете использовать явную проверку not null или не указывать ее полностью, если нет title. Аналогично для "group" ILIKE '', который соответствует только тогда, когда "group" пусто.

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

Попробуйте

"group"

с двойными кавычками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...