[英]Rails 6 select random ActiveRecord object for each category
我有 TestQuestion model 我在其中存儲帶有預定義和硬編碼類別的調查問題:
CATEGORIES = %w[Q1 Q2 Q3 Q4]
我想向用戶展示從每一類問題中隨機選擇的一個已發布問題。 我正在嘗試類似的東西:
CATEGORIES.each { |c| TestQuestion.where(category: c).random }
但我收到一個錯誤: NoMethodError (undefined method random' for <TestQuestion::ActiveRecord_Relation:0x00007f091cf1ac08>)
此外,我認為這是一個臭代碼。 有沒有更好的方法來做到這一點?
沒有隨機 function 但你可以做(取決於你的數據庫)
Postgresql 或 SQLite:
TestQuestion.where(category: c).order('RANDOM()').first
MySQL:
TestQuestion.where(category: c).order('RAND()').first
你也可以使用 Arel
TestQuestion.where(category: c).order(Arel.sql('RANDOM()')).first
注意:如果您的數據庫很大並且存在性能問題,您可能想要limit(1)
,那么first
你也在使用each.
這將返回您正在迭代的原始 object,您需要切換到map.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.