在rails 4中查询标签和另一个属性的部分匹配

时间:2014-03-18 11:29:52

标签: ruby-on-rails ruby postgresql activerecord ruby-on-rails-4

我想返回所有结果 - 标题(字符串) - 或任何标签(阵列) 与此对象关联的部分与查询匹配。

目前我有以下(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'

应该返回以上记录。

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您在:qiLIKE中都使用了= 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