ruby-on-rails – 如何在同一模型上组合两个查询的结果?
发布时间:2020-12-16 21:03:38 所属栏目:百科 来源:网络整理
导读:我需要返回十个记录才能在视图中使用.我有一个高度限制性的查询我想使用,但我想要一个限制较少的查询来填写结果,以防第一个查询没有产生十个结果. 只是玩了几分钟,这就是我想出来的,但它不起作用.我认为它不起作用,因为合并意味着在不同的模型上组合查询,但
我需要返回十个记录才能在视图中使用.我有一个高度限制性的查询我想使用,但我想要一个限制较少的查询来填写结果,以防第一个查询没有产生十个结果.
只是玩了几分钟,这就是我想出来的,但它不起作用.我认为它不起作用,因为合并意味着在不同的模型上组合查询,但我可能是错的. class Article < ActiveRecord::Base ... def self.listed_articles Article.published.order('created_at DESC').limit(25).where('listed = ?',true) end def self.rescue_articles Article.published.order('created_at DESC').where('listed != ?',true).limit(10) end def self.current Article.rescue_articles.merge(Article.listed_articles).limit(10) end ... end 查看控制台,这会强制查询rescue_articles中查询中的lists_articles限制,显示如下内容: Article Load (0.2ms) SELECT `articles`.* FROM `articles` WHERE (published = 1) AND (listed = 1) AND (listed != 1) ORDER BY created_at DESC LIMIT 4 Article Load (0.2ms) SELECT `articles`.* FROM `articles` WHERE (published = 1) AND (listed = 1) AND (listed != 1) ORDER BY created_at DESC LIMIT 6 OFFSET 4 我确信文档中缺少一些可笑的简单方法,但我还没有找到它. 编辑: 编辑#2: 解决方法
使用您的初始代码:
您可以使用然后获得前10个结果来连接两个数组: def self.current (Article.listed_articles + Article.rescue_articles)[0..9] end 我想一个非常脏的做法是: def self.current oldest_accepted = Article.published.order('created_at DESC').limit(25).last Artcile.published.where(['created_at > ?',oldest_accepted.created_at]).order('listed DESC').limit(10) end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |