我正在尝试在rails中公开搜索功能。我希望用户能够输入类似name:"john" color:"blue"
的字符串,并获取某些模型的ActiveRecord对象列表,这些对象的名称属性包含john
,颜色属性包含blue
。我也希望他们能够使用and
和or
以及括号,例如name:"john" or color:"blue"
或(name:"john" color:"blue") or name:"bill"
。理想情况下,他们也可以使用age<20
之类的东西,其中age是一个数字字段。有没有一个rails插件可以做到这一点。我一直在简短地看看sphinx和ferret两者似乎都为此创建了一个api,但不清楚它们是否提供了基于文本的明确选项,或者我是否需要自己解析搜索字符串。
答案 0 :(得分:2)
您必须在提交的表单和Ransack代码之间提供一个中间层(出于安全原因,这绝对是一个好主意)将字符串从您希望的格式转换为Ransack可以理解。
如果你查看了demo page以及gem的文档,你会发现创建你想要的查询非常简单。
观看如何根据您构建的条件生成GET
请求,并在应用程序中替换Ernie在演示中使用单个文本字段接受字符串(name:"john" color:"blue") or name:"bill"
的构建器。提交此字段时进行一些模式匹配,并构建一个适当的查询字符串以传递给Ransack gem。
修改强>
对于未来的问题,例如“什么是______
的热门宝石?”,请查看The Ruby Toolbox。如果Ransack不适合您的需求,那么Rails Search类别中的宝石可能就是您所需要的。我个人使用Ransack来完全你所描述的内容;为我的应用程序的User
模型提供自定义查询界面。
答案 1 :(得分:0)
我建议你做自己的搜索课。我发现,对于我所做的每个应用程序,搜索的需求都发生了很大的变化,并且很容易创建一个搜索应用程序,该应用程序会考虑您在搜索查询中可能需要的所有变量,并针对您要搜索的任意数量的类进行。
在你的Search类中,让它按照你想要的顺序返回一个集合,集合可以由搜索者可能想要的对象实例组成。