繁体   English   中英

Rails查询在测试期间给出了不同的顺序

[英]Rails query gives different ordering during testing

我的查询在Rails控制台和返回DESC订单的Web服务器上正常工作,但是在测试中返回ASC订单的测试失败。

下面是简化的模型代码。

class Room < ApplicationRecord
 has_many :room_members
 has_many :members, through: :room_members, source: :user

 def self.hot_rooms
  query = "SELECT r.*, rm,count
           FROM rooms r
           LEFT JOIN (SELECT room_id, count(room_id), max(id) as id
                      FROM room_members
                      GROUP BY room_id) rm
           ON r.id = rm.room_id
           WHERE r.is_started = true
           ORDER BY rm.count DESC, rm.id DESC
           LIMIT 12"
  self.find_by_sql(query)
 end
end
  • 治具测试数据
  • 除订购外没有错误
  • PostgreSQL 9.6.1
  • Rails 5.0.1
  • Ruby 2.3.1p112

问题是rm.count DESC
Room.recent_rooms的结果是控制台和Web服务器上的DESC,但令人惊讶的是 ,测试时为ASC。

我解决了。 问题是由'nil'计数引起的。(控制台上没有nil)psql计数nil而不是0。我认为nil是一个很大的数字。 因此,我修改了代码,并解决了问题。

  1. wm.count> Coalesce(wm.count,0)作为计数
  2. rm.count DESC>计数DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM