2012-02-16 232 views
1

試圖創建選擇一個過濾器來查找日程與給定的日期範圍內coursedates:導軌 - 按日期範圍過濾

AdminController:

def find_schedules 
    if params[:start_date] && params[:end_date] 
    start_date = params[:start_date] 
    end_date = params[:end_date] 
    @schedules = Schedule.find(:all, :conditions => {:coursedate => start_date..end_date}) 
    redirect_to :action => 'find_results' 
    end 
end 

find_schedules查看:

<% form_tag(find_schedules_path) do %> 
<%= select_date Date.today, :prefix => :start_date %> 
<%= select_date Date.today, :prefix => :end_date %>> 
<%= submit_tag "Submit", :disable_with => "Submitting..." %> 
<% end %> 

錯誤:

Processing AdminController#find_schedules (for ...) [POST] 
    Parameters: {"start_date"=>{"month"=>"3", "day"=>"23", "year"=>"2011"}, "commit"=>"Submit", "authenticity_token"=>"...", "end_date"=>{"month"=>"2", "day"=>"16", "year"=>"2012"}} 

ArgumentError (bad value for range) 

我似乎總是遇到日期/日期時間的問題。 coursedate是日程安排表中的日期時間字段,如果有任何區別的話。我只需要搜索日期,而不是時間。因爲MySQL如何存儲它,我需要以某種方式轉換數據類型嗎?或者...我還做了什麼錯?在此先感謝您的幫助。

在bdon的幫助下靠得更近,謝謝!現在,我得到一個未定義的方法錯誤,但我應該能夠明白這一點:

ActionView::TemplateError (undefined method `each' for nil:NilClass) on line #26 of /admin/find_results.html.erb:  
25: <tr class="<%= cycle('odd', 'even') %>"> 
26: <% @schedules.each do |schedule| %> 

回答

1

你得到這個錯誤,因爲「範圍」功能不支持哈希,這是在傳遞這種情況下:

1.9.3-p0 :008 > {:year => 2012, :month => 11, :day => 1}..{:year => 2012, :month => 12, :day => 1} 
ArgumentError: bad value for range 

相反,你需要做的開始和範圍的結束是datetime對象:

1.9.3-p0 :010 > DateTime.new(2012,11,1)..DateTime.new(2012,12,1) 
=> Thu, 01 Nov 2012 00:00:00 +0000..Sat, 01 Dec 2012 00:00:00 +0000 

所以

start_params = params[:start_date] 
start_date = DateTime.new(start_params["year"].to_i, start_params["month"].to_i, start_params["day"].to_i) 

對end_date執行相同操作。

+0

非常感謝您的回覆。日期時間的殘酷讓我感到困惑。我試過你的修復,但收到:ArgumentError(字符串與0比較失敗)我也試過:start_date = params [:start_date] .values_at(:month,:day,:year)...任何想法?再次感謝。 :) – 2012-02-16 21:28:22

+0

編輯原始響應:您需要將每個參數從字符串轉換爲to_i的整數。 – bdon 2012-02-16 21:30:17

+0

越來越近,謝謝......現在又犯了一個錯誤,但我應該可以通過它。 :) – 2012-02-16 21:41:24