簡體   English   中英

Rails 6 select 隨機 ActiveRecord object 每個類別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM