尝试进行以下查询:
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):
有什么想法吗?
答案 0 :(得分:1)
尝试
"group"
带双引号。
答案 1 :(得分:0)
由于这是PostgreSQL,当区分大小写时,您需要使用双引号引用标识符,或者您使用关键字作为标识符:
...where('title ILIKE ? OR "group" ILIKE ?', title, group)...
最好不要将关键字用作IMO列,这样您就不必担心这类事情了。我现在跟他引用,然后尽快重新命名专栏,但那只是我。
当我在这里时,你可能想要在没有意义的情况下省略这些检查。这部分查询:
title ILIKE '%%'
当title
不为空时,将始终匹配,因此您可能希望使用明确的not null
检查,或者在没有title
时完全将其保留。同样地,"group" ILIKE ''
仅在"group"
为空时匹配。