我有一个搜索控制器,我想搜索许多不同的模型。
所以说我有这个问题:" 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,但我对它很新。我已经看到了那些被称为"关注"哪个可能有用?
谢谢!
答案 0 :(得分:1)
<强>依赖关系强>
您可能最好使用Ruby堆栈的搜索扩展之一:
作为免责声明,我从未在制作过程中使用过任何这些,但根据我的理解,他们每个人都会&#34;索引&#34;应用程序中的数据,然后根据索引数据执行搜索
-
<强>索引强>
最重要的是,如果您想搜索多个模型,您最好利用基于索引的搜索系统。这将获取您要编制索引的所有数据,并将其置于可管理的可搜索格式中,然后您可以在需要时调用。
据我所知,太阳黑子在这方面运作良好(索引数据)。诀窍是在Sunspot设置中包含所有模型,然后您可以从中提取所需的数据。
关于这个here:
,有一个很棒的Railscast
我没有为你提供任何实时代码我很害怕 - 如果你需要更多的想法,我很乐意和他们一起回来