在Rails应用程序中放置模型搜索逻辑的位置?

Chr*_*art 7 search ruby-on-rails

我试图弄清楚将多属性搜索表单逻辑放在Rails应用程序中的"最佳"位置.所讨论的搜索表单具有若干属性,这些属性可能具有或不具有值,并且数据类型在属性之间不同.(例如,有搜索选项来搜索具有两个数字,日期范围,字符串值等之间的价格属性的项目.)此外,所讨论的模型通过has_a/has_many关系具有多个嵌套属性,并且其中一些属性也是需要搜索.

厚模型的Rails口头禅,瘦控制器让我对尝试将搜索逻辑聚合到控制器中犹豫不决.但是,在模型中放置与构建搜索条件相关的逻辑似乎也不合适.最后,本着DRY的精神,我对将一堆特定的属性名称硬编码到某个模块中犹豫不决,因为我需要将类似的搜索逻辑应用于几个不相关的模型.也许搜索视图中表单字段的命名约定可用于构建正确的条件?(比如使用"min_","max_","startdate_"等前缀表示数据类型和搜索条件运算符,后缀是模型和/或属性的名称?)

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

有关"Rails方式"的任何建议吗?

Dav*_*tte 1

如果您使用 2.3.x,我一直发现Searchlogic是搜索 ActiveRecord 模型的可靠且灵活的起点,您不需要全文搜索。它支持关联、您自己的命名范围等。

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

  • 我不认为这是一个关于我可以插入哪个 gem 的问题。这是一个关于如何在 Rails 应用程序中组织自己的代码的相关问题。 (2认同)