簡體   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