2016-05-12 11 views
0

私は、週の最も近いn日の日付のコレクションを返すメソッドを実装しようとしています。月曜。最も近いn日の日付を取得する

私の方法:

def date_of_next(day, weeks) 
    date = Date.parse(day) 
    if date > Date.today 
     delta = 0 
     date + delta 
    else 
     (0..weeks.to_i).each do |i| 
     delta = 7 * i 
     date + delta 
     end 
    end 
    end 

私は適切にこのメソッドを修復するためにどんな考えを持っていません。私たちを手伝ってくれますか? ありがとうございます。

リターンの私の予測:選択の

コード:

= f.select :date_of_training, label: "Data", 
    collection: @trainer.work_schedules.map{ |tw| [tw.next_n_days(4, "Monday"), tw.id]}, 
    prompt: "Wybierz datę" 

結果:

2016-05-16 
2016-05-16 
2016-05-30 
2016-06-06 
+1

私はどのような方法が返されるはずです。引数の値が異なるメソッドを呼び出すときに期待される出力を表示できますか? – Stefan

答えて

1

ナイーブな実装:

def next_n_days(amount, day_of_week) 
    (Date.today...Date.today+7*amount).select do |d| 
    d.wday == day_of_week 
    end 
end 

#  three ⇓ ⇓ Fridays 
next_n_days 3, 5 
#⇒ [ 
# [0] #<Date: 2016-05-13 ((2457522j,0s,0n),+0s,2299161j)>, 
# [1] #<Date: 2016-05-20 ((2457529j,0s,0n),+0s,2299161j)>, 
# [2] #<Date: 2016-05-27 ((2457536j,0s,0n),+0s,2299161j)> 
# ] 

より正確な実装:

def next_n_days(amount, day_of_week) 
    nearest = (Date.today...Date.today+7).detect { |d| d.wday == day_of_week } 
    nearest.step(nearest+7*amount-1, 7).to_a 
end 
+0

最も近い変数がnilであるため、何かが間違っています。私は金額をチェックし、day_of_weekは値を持っています。 –

+0

'day_of_week'にはどのような値がありますか? 'wday'フォーマット(日曜日は' 0'、月曜日は '1')に準拠しているはずです。** OK **、あなたのアップデートで、' 'Monday" 'のような名前を渡したいと思っています。それは投稿された元の質問には指定されていなかったので、私はこれをあなたに練習として残します。 – mudasobwa

関連する問題