我正在嘗試為評論最多的用戶展示“前 10 名”。
評論有belongs_to :user, counter_cache: :comments_count。
用戶有:
def self.top_by_comment_count
order('comments_count desc').limit(10).to_a
end
這在我的本地機器上運行良好,但在 Heroku 部署中,我讓所有用戶在頂部沒有評論。
我認為這將是一個相對簡單的任務,但我正在努力反對它。
感謝您的任何幫助!
uj5u.com熱心網友回復:
您可能在comments_count列中有 NULL。
最好的辦法是根本沒有 NULL,用這個進行一點遷移可以解決這個問題:
change_column_default :users, :comments_count, 0
change_column_null :users, :comments_count, false
或者,您可以告訴 PostgreSQL 您想要 NULL 的位置:
order('comments_count desc nulls last')
但實際上,只需更改列的空值和默認值即可完全避免 SQL 空值。
uj5u.com熱心網友回復:
可能的問題是 PostgreSQL 的命令NULL不像你預期的那樣
擁有comments_countasnil的用戶位于此串列的頂部
如何修復它。您可以在 Heroku 上的 rails 控制臺中運行
User.where(comments_count: nil).find_each { |user| User.reset_counters(user.id, :comments) }
此命令將重置NULL為0
我還建議添加新的遷移,默認0為comments_count
像這樣的東西
change_column :users, :comments_count, :integer, default: 0, null: false
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/446665.html
