2017-02-15 59 views
0

在我的Rails 4應用程序中,我提交了Questions。我想要做的是將Questions的順序進行洗牌,將列表分成七份(接下來的七天),然後使用publish_date保存這些QuestionsRails劃分數組並賦值爲

publish_dates將是下一個7天(即Date.current+1Date.current+2Date.current+3Date.current+4Date.current+5Date.current+6Date.current+7)。

我知道我可以用@questions.shuffle來洗牌記錄,但是我不知道如何將結果除以7(我知道由於Questions的數量不會總是可以被7整除,所以有些日子可能會結束另外還有一個Question),以及如何將這些分配給publish_date

非常感謝您的幫助!


UPDATE

聽起來好像我只需要使用in_groups_of來劃分的結果。我現在不明白的是如何將組分配到日期。

+1

[如何將一個Ruby數組拆分(塊)成X部分?](http://stackoverflow.com/questions/2699584/how-to-split-chunk-a-ruby-array-進入x元素的部分) –

+0

Thanks @BradWerth。這聽起來像我可以使用in_groups_of。我現在不瞭解的是如何將這些羣組分配到日期。 – yellowreign

+0

對不起,我選錯了,你可能想要http://stackoverflow.com/questions/3864139/need-to-split-arrays-to-sub-arrays-of-specified-size-in-ruby –

回答

0

你已經想出瞭如何獲得你的羣體。

questions.map.with_index(1) do |question, i| 
    question.update(publish_date: Date.current + i 
end 

這是假設questions是一個AR模型和publish_date是一個實際的屬性:要設置族元素的發佈日期,你可以做這樣的事情。

+0

謝謝!是的,'Questions'是一個AR模型,'publish_date'是一個實際的屬性。我一定是做錯了什麼。我做了'@ questions.shuffle','@ questions.in_groups_of(3)',然後'@ questions.map.with_index(1)do | question,i | question.update(publish_date:Date.current + i) end'但所有的問題都以Date.current + i(明天)結束,並以publish_date結尾。我做錯了什麼? – yellowreign

+0

對不起,我意識到我可能需要將'with_index'後面的數字改成'(7)'。當我這樣做時,'publish_date'對於'questions'是不同的,但它似乎沒有考慮到這些組。我選擇了9個「問題」,但不是將它們分配給接下來的7天,而是分配給接下來的9天。我必須錯過@questions之間的東西。in_groups_of(3)和你的代碼,但我不確定是什麼。 – yellowreign

+0

'@ questions.in_groups_of(3)'給你一個3個元素數組的數組。所以你需要遍歷組。即像@ @ questions.in_groups_of(3).each {| group | '.group.map.with_index ...}' –

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,因爲每天的問題數量會有所不同。