我正在构建rails quiz app。我有列类别,问题输入和答案的模型问题。 所以我需要从表格问题 - 列类别中随机选择7个类别名称并在视图中显示它们。 之后,我将对每个选定类别的question_input(随机选择10个问题)执行相同的操作。 所以我坚持到这里,我需要一些帮助。
以下是我的模特。
class Question < ActiveRecord::Base
CATEGORIES = %w(history geography art literature comics movie music culture religion mithology sport technology science politics)
validates :category, inclusion: { in: CATEGORIES }, presence: true
validates :question_input, presence: true
validates :answer, presence: true
end
欢迎任何帮助!
答案 0 :(得分:2)
CATEGORIES.sample 7
请参阅有关如何使用的文档:http://ruby-doc.org/core-1.9.3/Array.html#method-i-sample
答案 1 :(得分:0)
您可以选择以下类别和问题:
categories = CATEGORY.sample(7)
questions = Question.where(category: categories)
categories.map do |category|
questions.select { |q| q.category == category }.sample(10)
end
答案 2 :(得分:0)
一旦你选择(正如其他人指出)你的ruby数组中的类别(使用http://ruby-doc.org/core-2.3.0/Array.html#method-i-sample),你应该让数据库为你返回一个随机的记录样本:
# MySQL
Question.where(category: chosen_category).order("RAND()").limit(10)
# Postgres
Question.where(category: chosen_category).order("random()").limit(10)
如果您没有太多问题,那么在ruby中进行抽样问题可能会更好。检查你的号码。
grouped_questions = Questions.all().group_by(&:category).each do |cat, qns|
[cat, qns.sample(10)]
end.to_h
# Now grouped_questions is a hash with:
# {
# category: [array of 10 random questions in that category],
# ...
# }