ActiveRecord:搜索多个模型以获取单词列表

时间:2014-08-16 08:51:43

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

我有一个搜索控制器,我想搜索许多不同的模型。

所以说我有这个问题:" Foo bar baz"。然后我想要以下查询:

Model1.where("name like '%foo%' or name like '%bar%' or name like '%baz'").offset(o).limit(l)
Model2.where("title like '%foo%' or title like '%bar%' or title like '%baz'").offset(o).limit(l)
Model3.joins(:sources).where("sources.name" => [source1, source2]).where("name like '%foo%' or name like '%bar%' or name like '%baz'").offset(o).limit(l)

最重要的是我想要安全地做到这一点(没有SQL注入),但如果我能保持DRY并且相当好,那就太好了。我正在使用Rails 4,但我对它很新。我已经看到了那些被称为"关注"哪个可能有用?

谢谢!

1 个答案:

答案 0 :(得分:1)

<强>依赖关系

您可能最好使用Ruby堆栈的搜索扩展之一:

  

作为免责声明,我从未在制作过程中使用过任何这些,但根据我的理解,他们每个人都会&#34;索引&#34;应用程序中的数据,然后根据索引数据执行搜索

-

<强>索引

最重要的是,如果您想搜索多个模型,您最好利用基于索引的搜索系统。这将获取您要编制索引的所有数据,并将其置于可管理的可搜索格式中,然后您可以在需要时调用。

据我所知,太阳黑子在这方面运作良好(索引数据)。诀窍是在Sunspot设置中包含所有模型,然后您可以从中提取所需的数据。

关于这个here

,有一个很棒的Railscast

enter image description here

我没有为你提供任何实时代码我很害怕 - 如果你需要更多的想法,我很乐意和他们一起回来