我有一个存储用户创建的文档的应用程序。这些文件有作者,创作日期。作者可以扮演角色。此外,给定文档可能会被标记为关键字。数据库中有~16K文档,用户可能希望以此信息的任意组合作为限制来查看文档。例如,查看给定作者的所有文档,或在给定时间窗口中发布的文档,或者此角色的作者等(以及这些文档的任意组合)。
是否有推荐的最佳实施方法?一般来说,我已经在params散列中传递了所需的条件,然后使用复杂的if ... elsif .... else ..将传递的条件直接解码到不同的Model.find调用中。或者,我将使用类似的if序列来构造正确的SQL条件短语,然后使用单个查找调用。
这两个看起来都像黑客,应该有一个更好的方法来使用命名范围,但我无法找到一个干净的方式来处理排列。
答案 0 :(得分:1)
查看Ben Johnson的SearchLogic - 它是一个基本上可以动态生成命名范围的gem。
答案 1 :(得分:0)
您只需要使用Model.find
的一行代码。不使用条件逻辑来创建多个find
调用,而是使用条件逻辑来填充传递给:conditions
调用的find
哈希值。