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

Posted

技术标签:

【中文标题】在 Rails 应用程序中将模型搜索逻辑放在哪里?【英文标题】:Where to put model search logic in a Rails application? 【发布时间】:2011-04-05 06:20:29 【问题描述】:

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

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

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

对执行此操作的“Rails 方式”有何建议?

【问题讨论】:

好问题。像这样有趣的 Rails 问题很少会在 SO 上引起太多关注。但是,如果他们确实受到关注,您可以获得一些很好的答案。在这里查看我的问题***.com/questions/1068558,这实际上是相关的(有点)。顺便说一句,您关于使用属性名称的想法还不错,而且似乎是 Railsy 要做的事情。 Yar,谢谢你的链接。您的评论对我来说绝对有用 - 我同样在考虑一旦我弄清楚如何去做,我最终会将搜索逻辑放在哪里。在发布我的问题后,我还看到了关于在 Rails 中搜索的演示文稿:scribd.com/doc/3188387/Advanced-Searching-in-Rails。我认为那里列出的方法、Dave 在下面的建议以及您对组织不完全符合 MVC 范式的代码的建议的组合将构成我的解决方案的基础。谢谢! 没问题,@Chris Hart,祝你好运。 【参考方案1】:

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

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

【讨论】:

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

以上是关于在 Rails 应用程序中将模型搜索逻辑放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章

在 Rails 4.1 中将页面特定的 jQuery 代码放在哪里?

将 ORM 模型和 MVC 的搜索逻辑放在哪里? [复制]

在 MVC 中将视图状态之类的选择放在哪里?

我可以在 vue.js 中将授权逻辑放在哪里?

在 DDD 中将全局规则验证放在哪里

在哪里放置不是模型、视图、控制器或助手的 Rails 代码?