在索引页面上处理多个可能的查询条件的最佳方法

时间:2009-08-12 22:09:29

标签: ruby-on-rails named-scope

我有一个存储用户创建的文档的应用程序。这些文件有作者,创作日期。作者可以扮演角色。此外,给定文档可能会被标记为关键字。数据库中有~16K文档,用户可能希望以此信息的任意组合作为限制来查看文档。例如,查看给定作者的所有文档,或在给定时间窗口中发布的文档,或者此角色的作者等(以及这些文档的任意组合)。

是否有推荐的最佳实施方法?一般来说,我已经在params散列中传递了所需的条件,然后使用复杂的if ... elsif .... else ..将传递的条件直接解码到不同的Model.find调用中。或者,我将使用类似的if序列来构造正确的SQL条件短语,然后使用单个查找调用。

这两个看起来都像黑客,应该有一个更好的方法来使用命名范围,但我无法找到一个干净的方式来处理排列。

2 个答案:

答案 0 :(得分:1)

查看Ben Johnson的SearchLogic - 它是一个基本上可以动态生成命名范围的gem。

http://github.com/binarylogic/searchlogic/tree/master

答案 1 :(得分:0)

您只需要使用Model.find的一行代码。不使用条件逻辑来创建多个find调用,而是使用条件逻辑来填充传递给:conditions调用的find哈希值。