1

我正在尝试在 Rails 中公开搜索功能。我希望用户能够输入类似的字符串name:"john" color:"blue"并获取某些模型的 ActiveRecord 对象列表,这些模型的名称属性包含john,颜色属性包含blue. 我还希望他们能够使用andandor和括号,例如name:"john" or color:"blue"or (name:"john" color:"blue") or name:"bill"。理想情况下,他们还可以使用诸如age<20年龄是数字字段之类的东西。有没有一个rails插件可以做到这一点。我已经简要地查看了 sphinx 和 ferret 两者似乎都为此创建了一个 api,但尚不清楚它们是否提供了基于明文的选项,或者我是否需要自己解析搜索字符串。

4

2 回答 2

2

ErnieRansack gem 是一个很好的起点。

您必须在提交的表单和 Ransack 代码之间提供一个中间层(出于安全原因,无论如何这都是一个好主意),以将字符串从您想要的格式转换为 Ransack 可以理解的格式。

如果您查看演示页面和 gem 的文档,您会发现创建所需的查询类型非常简单。

观察如何GET根据您构建的条件生成请求,并在您的应用程序中将演示中的构建器 Ernie 替换为接受字符串之类的单个文本字段(name:"john" color:"blue") or name:"bill"。提交此字段时进行一些模式匹配,并构建适当的查询字符串以传递给 Ransack gem。

编辑

对于未来的问题,例如“什么是流行的 gem ______?”,请查看Ruby 工具箱。如果 Ransack 不能满足您的需求,Rails Search类别中的宝石可能会满足您的需求。我个人将 Ransack 用于所描述的内容;User为我的应用程序模型提供自定义查询接口。

于 2012-07-23T02:33:11.477 回答
0

我建议做你自己的搜索类。我发现对于我所做的每个应用程序,搜索的需求都发生了很大的变化,创建一个搜索应用程序非常简单,它考虑了搜索查询中可能需要的所有变量,针对你想要搜索的任意数量的类构成。

在您的 Search 类中,让它按照您想要的顺序返回一个集合,并且该集合可以由搜索者可能想要的对象实例组成。

于 2012-07-23T04:38:49.757 回答