我试图找出在 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/