2013-10-18 58 views
1

我有一個日曆應用程序,我正在Rails 3中工作。我正在收集來自用戶的'到'和'從'日期並創建日期,並基於該範圍創建事件。這裏是代碼:如何從日期範圍中刪除日期?

date_range = (params[:from_date]..params[:to_date]).to_a 
date_range.each do |r| 
    params[:orientation][:class_date] = r 
    @orientation = Orientation.new(params[:orientation]) 
    @orientation.save 
end 

這工作就像一個魅力。現在,我想在星期一至星期五的視圖中添加複選框,以便用戶可以指定要創建重複事件的日期。我的想法是擴展上面的邏輯並創建一個日期範圍,其中包含'to'和'from'日期,然後根據用戶檢查的複選框(天)刪除日期。如果用戶選中'星期一','星期三','星期五',我會創建我的日期範圍,然後從範圍中刪除所有星期四和星期五的日期。任何人都可以在Ruby中提出任何方法來處理這個問題嗎?

回答

2

你可以在你的表單中添加複選框忽略選定的日期,然後每天忽略循環:

# view 
<% Date::DAYNAMES.each_with_index do |day_name, wday| %> 
    <%= check_box_tag "ignored_days[]", wday %> 
    <%= day_name %> 
<% end %> 

# controller 
date_range.each do |r| 
    next if params[:ignored_days].include? r.wday.to_s #added edit here 
    params[:orientation][:class_date] = r 
    @orientation = Orientation.new(params[:orientation]) 
    @orientation.save 
end 

希望這有助於!

+0

謝謝Y先生,我認爲這讓我很接近。看看我的輸出的這個pastie。 http://pastie.org/8412579'next if'似乎正在執行所有日期。 – Lumbee

+0

我更新了我的答案(把'ignored_days [#{wday}]'改成了一個數組而不是一個哈希@Lumbee – MrYoshiji

+0

Boom!感謝你們..你們搖滾,我確實需要給r.wday加'to_s'。將編輯你的答案並接受。Thanx! – Lumbee