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

发布于 2024-07-30 19:40:40 字数 410 浏览 1 评论 0原文

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

有推荐的最佳方法来实现这一点吗? 一般来说,我已经在参数哈希中传递了所需的条件,然后使用复杂的 if ... elsif .... else .. 将传递的条件直接解码为不同的 Model.find 调用。 或者,我将使用类似的 if 序列来构造正确的 SQL 条件短语,然后使用单个 find 调用。

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

I have a application which stores documents created by users. These documents have authors, creation dates. The authors can have roles. Additionally a given document may get tagged with keywords. There are ~16K documents in the database, and a user may want to view the documents with any combination of this information as a limit. For example, see all documents by a given author, or published in a given time window, or from authors in this role, etc (and any combination of these).

Is there a recommended best way to implement this? In general I have passed the desired conditions in the params hash and then either used a complicated if ... elsif.... else.. to decode the passed conditions directly into different Model.find calls. Alternatively, I will use a similar if sequence to construct the proper SQL conditions phrase and then use a single find call.

Both of these seem like hacks and there should be a better way to do it with named scopes, but I can't figure out a clean way to deal with the permutations.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

兔姬 2024-08-06 19:40:40

看看 Ben Johnson 的 SearchLogic——它是一个基本上可以动态生成命名范围的宝石。

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

Check out Ben Johnson's SearchLogic -- it's a gem that basically generates named scopes on the fly.

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

郁金香雨 2024-08-06 19:40:40

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

You only need to have one line of code with Model.find. Instead of using conditional logic to create multiple find calls use conditional logic to populate the :conditions hash which is passed into the find call.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文