我有一个日期时间选择器,可以发送签到和发送信息。结帐日期与搜索框。然后网址看起来像;
http://localhost:3000/locations/listings?utf8=%E2%9C%93&search=london&start_date=12%2F04%2F16&end_date=20%2F04%2F16
我接受params哈希并解析字符串
start_date = Date.parse(params[:start_date])
end_date = Date.parse(params[:end_date])
首先,我必须检查if (start_date.present? && end_date.present?)
,这样可以正常工作。
但是如果用户手动输入其他内容而不是日期到网址,例如;
http://localhost:3000/locations/listings?utf8=%E2%9C%93&search=london&start_date=londoneye6&end_date=20%2F04%2F16
然后我当然得到一个错误;
invalid date
我应该如何控制字符串是否可以在控制器操作上解析。我还应该检查london-eye, london/eye
字符串,其中包括- /
谢谢
答案 0 :(得分:4)
您必须尝试解析字符串并解救ArgumentError
begin
myDate = Date.parse("31-01-2016")
rescue ArgumentError
# handle invalid date
end
一行(请注意,这会拯救所有错误)
myDate = Date.parse("31-01-2016") rescue nil
答案 1 :(得分:2)
您可以使用Date.parse
验证时间,并在解析返回ArgumentError
时隐藏nil
例外:
<强>控制器强>:
def param_date date
Date.parse(date)
rescue ArgumentError
nil
end
start_date = param_date(params[:start_date])
end_date = param_date(params[:end_date])