查询中的OR条件

时间:2018-05-02 18:43:47

标签: ruby-on-rails postgresql activerecord

尝试进行以下查询:

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 :(得分:1)

尝试

"group"

带双引号。

答案 1 :(得分:0)

由于这是PostgreSQL,当区分大小写时,您需要使用双引号引用标识符,或者您使用关键字作为标识符:

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

最好不要将关键字用作IMO列,这样您就不必担心这类事情了。我现在跟他引用,然后尽快重新命名专栏,但那只是我。

当我在这里时,你可能想要在没有意义的情况下省略这些检查。这部分查询:

title ILIKE '%%'
title不为空时,

将始终匹配,因此您可能希望使用明确的not null检查,或者在没有title时完全将其保留。同样地,"group" ILIKE ''仅在"group"为空时匹配。

相关问题