2017-02-15 2 views
0

레일 4 앱에서 Questions을 제출했습니다. 내가하고 싶은 일은 Questions의 순서를 섞어 목록을 7 개 (다음 7 일간)로 나누고이 Questions을 publish_date로 저장하는 것입니다.배열을 나누고 값을 할당하는 레일

publish_dates는 다음 7 일간 것 (즉 Date.current+1, Date.current+2, Date.current+3, Date.current+4, Date.current+5, Date.current+6, Date.current+7).

@questions.shuffle으로 레코드를 셔플 할 수 있다는 것을 알고 있지만, 결과를 7로 나누는 방법을 모르겠습니다. (Questions의 숫자는 항상 7로 나눌 수 없으므로 일부는 종료 될 수 있음을 알고 있습니다. 추가로 Question)를 추가하고이를 publish_date에 할당하는 방법에 대해 설명합니다.

도움을 주셔서 감사합니다. 난 그냥 결과를 분할하는 in_groups_of를 사용할 필요가 같은


UPDATE는

소리가 난다. 지금 이해할 수없는 것은 그룹을 날짜에 할당하는 방법입니다.

+1

[X 요소의 일부로 Ruby 배열을 분할하는 방법] (http://stackoverflow.com/questions/2699584/how-to-split-chunk-a-ruby-array- x-elements-of-x-elements) –

+0

감사합니다. @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는 AR 모델이며, publish_date 실제 속성이라고 가정한다

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

: 그룹 요소의 게시 날짜를 설정하려면, 당신은 이런 식으로 뭔가를 할 수 있습니다. 당신이 레코드를 셔플하고 있기 때문에

+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'하지만 모든 질문은 이제 막 publish_date로 Date.current + i (내일)로 끝납니다. 나는 무엇을 잘못 했는가? – 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]] 

는거야 이런 식으로 주어진 일 동안 질문을 합치는데, 7 개가 아닌 숫자가 여러 개인 경우 주 초반에 모두 앞에로드됩니다.

질문 수가 매일 다양하기 때문에 each_slice과 같은 일과 관련이 있다고 생각하지 않습니다.

관련 문제