加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

我确信文档中缺少一些可笑的简单方法,但我还没有找到它.

编辑:
我想要做的是返回最近25篇文章中列出的所有文章.如果这不能得到我的十篇文章,我想在最近的文章中添加足够的文章,其中列出的不是真的,以获得我的十篇文章.

编辑#2:
换句话说,merge方法似乎将查询串在一起以进行一次长查询而不是合并结果.我需要两个查询的前十个结果(列出所列文章的优先级),而不是一个长查询.

解决方法

使用您的初始代码:

您可以使用然后获得前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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读