我想返回所有结果 - 标题(字符串) - 或任何标签(阵列) 与此对象关联的部分与查询匹配。
目前我有以下(Postgres),但它没有返回任何结果。
where(":q = ANY (tags) OR 'title' iLIKE :q", q: "%#{query}%")
旅行表的相关部分
create_table "trips", force: true do |t|
t.string "title"
t.string "tags", default: [], array: true
典型记录:
Trip.create(title: 'Test', tags: ['Edinburgh', 'London'])
if query = 'edi' or 'te'
应该返回以上记录。
任何帮助将不胜感激
答案 0 :(得分:1)
您在:q
和iLIKE
中都使用了= ANY (tags)
,这可能效果会更好:
where(":q = ANY (tags) OR 'title' iLIKE :iq", q: query, iq: "%#{query}%")
同样ANY
不是ILIKE
,要创建等效文件,请参阅here:
为了以后的搜索,我使用了:
create function reverse_ilike(text, text) RETURNS boolean AS 'select $2 ilike $1;' LANGUAGE SQL IMMUTABLE RETURNS NULL ON NULL
INPUT;
create operator ~~*^ (PROCEDURE = reverse_ilike, LEFTARG = text, RIGHTARG = text);
最佳,
哪个应该(我没有测试过这个)让你做到:
where(":q ~~*^ ANY (tags) OR 'title' iLIKE :iq", q: query, iq: "%#{query}%")
修改强>
此外,您似乎有拼写错误 - 您检查输入查询是iLike
字符串 'title'
而不是列 { {1}} - 查询应为:
title