ruby-on-rails - 在 Rails 应用程序中将模型搜索逻辑放在哪里?

标签 ruby-on-rails search

我试图找出在 Rails 应用程序中放置多属性搜索表单逻辑的“最佳”位置。有问题的搜索表单有几个可能有值也可能没有值的属性,并且属性之间的数据类型不同。 (例如,有搜索选项可以搜索价格属性介于两个数字、日期范围、字符串值等之间的项目。)此外,有问题的模型通过 has_a/has_many 关系具有多个嵌套属性,其中一些属性也需要可搜索。

厚模型、薄 Controller 的 Rails 口头禅让我犹豫是否尝试将搜索逻辑聚合到 Controller 中。但是,将与构建搜索条件相关的逻辑放入模型中似乎也不合适。最后,本着 DRY 的精神,我不愿将一堆特定属性名称硬编码到某个模块中,因为我需要将类似的搜索逻辑应用于几个不相关的模型。也许可以使用搜索 View 中表单字段的命名约定来构建正确的条件? (类似于使用“min_”、“max_”、“startdate_”等前缀表示数据类型和搜索条件运算符,后缀是模型和/或属性的名称?)

我已经搜索过这方面的建议,但大多数建议似乎不灵活(硬编码的属性名称,不支持嵌套属性)或使用基于路由的搜索,我认为这不会满足我的需要(其中 5-10参数可以立即用于搜索)。

关于这样做的“Rails方式”有什么建议吗?

最佳答案

如果您使用的是 2.3.x,我总是找到 Searchlogic成为搜索不需要全文搜索的 ActiveRecord 模型的可靠和灵活的起点。它支持关联、您自己的命名范围等。

如果您使用的是 Rails 3,meta_search gem 似乎提供了类似的功能,但我对它的经验非常有限。

关于ruby-on-rails - 在 Rails 应用程序中将模型搜索逻辑放在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592161/

相关文章:

java - Lucene 5.2.1 中的更改分数

ruby-on-rails - 为什么功能测试失败了?

mysql - 使用正则表达式搜索并替换 Mysql 中的 JSON

search - 如何使用 4.0.0 版从 lucene 地理(空间)搜索中获取距离?

html - AJAX 调用后显示数据,如何在 Controller 中呈现?

ruby-on-rails - 在 Rails 中构建一个简单的搜索表单?

java - JSP搜索数据库

ruby-on-rails - RoR——NoMethodError:私有(private)方法 `open' 调用 Gem::Package:Class

javascript - 将单个对象加载到 sencha touch 中的数据存储中

ruby-on-rails - 通过关联使用 has_many 创建获取 NoMethodError(未定义方法 `name' 为 nil :NilClass)