2015-11-08 54 views
0

這裏是形式相關的部分:創建Date對象只能有時

<%= select_date(@end_date, {order: [:month, :day, :year], start_year: 2009, end_year: Time.now.year, prefix: "end_date"},{class: "form-control date-select"}) %> 

這裏是通過PARAMS過去了表單提交:

=> {"utf8"=>"✓", 
"authenticity_token"=>」123」, 
"end_date"=>{"month"=>"8", "day"=>"25", "year"=>"2014"}, 
"commit"=>"Submit", 
"controller"=>」some_controller」, 
"action"=>」some_action」} 

而在控制器中,這裏是我如何從參數創建日期對象:

Date.parse params["end_date"].values.join("-") 

奇怪的是,它有時只能起作用。例如,當用戶選擇以上(2015年8月25日)之日起,它配備了以下錯誤:

invalid date 

它突出顯示了我解析日期區域:

Date.parse params["end_date"].values.join("-") 

回答

1

所以,這個表達式:

params["end_date"].values.join("-") 

會給你字符串'8-25-2014'。在分析日期時,ruby試圖猜測你正在使用的格式,在這種情況下,它使用dd-mm-yyyy。這意味着你認爲十一月十日將會被十月十一號的Ruby讀取(這比在25個月之後的例外更糟糕)。

最佳解決方案 - 不要使用解析。你已經知道了值,爲什麼給解析器一個錯誤的機會?

Date.new *params[:end_date].values_at(:year, :month, :day).map(&:to_i) 

注意:您仍然需要包裹上面的代碼中begin rescue爲您的用戶可以(將)摘棗像二月

31
相關問題