Rails随机选择表列

时间:2016-02-16 18:14:16

标签: mysql ruby-on-rails ruby

我正在构建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

欢迎任何帮助!

3 个答案:

答案 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],
#    ...
# }