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

时间:2010-08-28 19:43:43

标签: ruby-on-rails search

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

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

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

关于“Rails方式”的任何建议吗?

1 个答案:

答案 0 :(得分:1)

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

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