Rails划分数组并赋值给

时间:2017-02-15 04:42:38

标签: ruby-on-rails ruby

在我的Rails 4应用中,我提交了Questions。我想要做的是将Questions的顺序洗牌,将列表分成七个(接下来的七天),然后使用publish_date保存这些Questions

publish_dates将是接下来的7天(即Date.current+1Date.current+2Date.current+3Date.current+4Date.current+5,{{1 },Date.current+6)。

我知道我可以使用Date.current+7随机播放记录,但我不知道如何将结果除以7(我知道,因为@questions.shuffle获胜的数量已经超过了Questions。 t总是可以被7整除,有些日子可能会有一个额外的Question),以及如何将它们分配给publish_date

提前感谢您的帮助!

更新

听起来我只需要使用in_groups_of来划分结果。我现在不明白的是如何将小组分配到日期。

2 个答案:

答案 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之类的事情有关,因为每天的问题数量会有所不同。