我有一个网络应用程序,我想在其中提供高级搜索,用户可以在其中输入任意数量的由 AND 和/或 OR 连接的查询,如下所示:
(在网页搜索框中输入)
name = "john" OR (occupation = "gardener" AND hobby.main = "reading")
在之前post ,我成功地实现了一个系统,在这个系统中,我直接将上述格式的查询转换为有效的 SQL 语句,并将它们直接输入 SQL 以查询数据库。
这行得通,但现在我担心三件事:
- 这是 SQL 注入(inject)的祸害
- 如果用户的输入无效,SQL 会抛出一个错误,这不是很漂亮...在处理这些异常时遇到了一些麻烦(尽管这部分是可行的)。
- 代码看起来真的很 hacky,我想知道是否有更好的方法。
嗯,我听说有更好的方法,就是使用搜索 gem 。
但是,我一直无法找到符合我需要的 gem 。许多 gem 似乎 too complex对于我需要的东西,但我发现没有任何东西可以明确说明如何具体实现我正在寻找的东西——用户输入由 AND/OR 语句连接的动态数量的查询。
将语句直接转换为 SQL 语法并将其直接注入(inject)(就像我现在所做的那样)的成本到底有多少?为我想要的东西整合这些 gem 之一有多容易? “有经验的”Rails 开发人员会做什么?我完全是 Rails 的菜鸟,所以我没有这方面的经验。
最佳答案
有一个名为 Ransack 的搜索 gem
它允许您以非常简单的方式搜索模型:
<%= f.search_field :name_or_description_or_email_or_articles_title_cont %>
上面的示例是一个标签,当点击它时将在包含搜索文本字段中提供的内容的名称或描述或电子邮件或 article_title 列中进行搜索
下面是引擎盖下的搜查示例
>> User.ransack(first_name_cont: 'Rya').result.to_sql
=> SELECT "users".* FROM "users" WHERE ("users"."first_name" LIKE '%Rya%')
它使用简单,如果需要可用于高级搜索
关于mysql - 用于搜索的 Rails Gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40306495/