【发布时间】:2011-04-05 06:20:29
【问题描述】:
我正在尝试找出在 Rails 应用程序中放置多属性搜索表单逻辑的“最佳”位置。有问题的搜索表单有几个可能有值也可能没有值的属性,并且属性之间的数据类型不同。 (例如,有搜索选项可以搜索价格属性介于两个数字、日期范围、字符串值等之间的项目。)此外,有问题的模型通过 has_a/has_many 关系具有多个嵌套属性,其中一些属性也需要可搜索。
Rails 的厚模型,瘦控制器的口头禅让我犹豫是否尝试将搜索逻辑聚合到控制器中。但是,将与构建搜索条件相关的逻辑放入模型中似乎也不合适。最后,本着 DRY 的精神,我不愿将一堆特定属性名称硬编码到某个模块中,因为我需要将类似的搜索逻辑应用于几个不相关的模型。也许可以使用搜索视图中表单字段的命名约定来构建正确的条件? (类似于使用“min_”、“max_”、“startdate_”等前缀表示数据类型和搜索条件运算符,后缀是模型和/或属性的名称?)
我已经搜索过这方面的建议,但大多数建议似乎不灵活(硬编码的属性名称,不支持嵌套属性)或使用基于路由的搜索,我认为这不会满足我的需要(其中一次搜索可以使用 5-10 个参数)。
对执行此操作的“Rails 方式”有何建议?
【问题讨论】:
-
好问题。像这样有趣的 Rails 问题很少会在 SO 上引起太多关注。但是,如果他们确实受到关注,您可以获得一些很好的答案。在这里查看我的问题stackoverflow.com/questions/1068558,这实际上是相关的(有点)。顺便说一句,您关于使用属性名称的想法还不错,而且似乎是 Railsy 要做的事情。
-
Yar,谢谢你的链接。您的评论对我来说绝对有用 - 我同样在考虑一旦我弄清楚如何去做,我最终会将搜索逻辑放在哪里。在发布我的问题后,我还看到了关于在 Rails 中搜索的演示文稿:scribd.com/doc/3188387/Advanced-Searching-in-Rails。我认为那里列出的方法、Dave 在下面的建议以及您对组织不完全符合 MVC 范式的代码的建议的组合将构成我的解决方案的基础。谢谢!
-
没问题,@Chris Hart,祝你好运。
标签: ruby-on-rails search