在我的Rails 4应用中,我提交了Questions
。我想要做的是将Questions
的顺序洗牌,将列表分成七个(接下来的七天),然后使用publish_date保存这些Questions
。
publish_dates
将是接下来的7天(即Date.current+1
,Date.current+2
,Date.current+3
,Date.current+4
,Date.current+5
,{{1 },Date.current+6
)。
我知道我可以使用Date.current+7
随机播放记录,但我不知道如何将结果除以7(我知道,因为@questions.shuffle
获胜的数量已经超过了Questions
。 t总是可以被7整除,有些日子可能会有一个额外的Question
),以及如何将它们分配给publish_date
。
提前感谢您的帮助!
更新
听起来我只需要使用in_groups_of
来划分结果。我现在不明白的是如何将小组分配到日期。
答案 0 :(得分:0)
您已经了解了如何获得您的论坛。要设置组元素的发布日期,您可以执行以下操作:
questions.map.with_index(1) do |question, i|
question.update(publish_date: Date.current + i
end
这假设questions
是AR模型,publish_date
是实际属性。
答案 1 :(得分:0)
由于你正在改变记录,你不必担心他们所处的订单。只需解决这些问题,直到你的问题用尽为止:
# Represent questions here as numbers
questions = (1..15).to_a
# Create an array to collect answers for each day of the week
days = Array.new(7) { [ ] }
# Deal out each of the questions to a day of the week
questions.each_with_index do |q, i|
days[i % 7] << q
end
# Scramble things just to introduce a bit of variety
days.shuffle!
days
# => [[3, 10], [4, 11], [2, 9], [1, 8, 15], [6, 13], [5, 12], [7, 14]]
通过这种方式,您可以在给定的日期内得到相当均匀的问题,但如果没有七个数量的非倍数,则不会在一周开始前加载它们。
我认为这不可能与each_slice
之类的事情有关,因为每天的问题数量会有所不同。