感谢大家的建议。这是我最终的解决方案。
首先,使用 datepicker 确保只能在表单中输入有效日期,如下所示...
$(function(){
$('#startdate').datepicker({
changeYear: true,
dateFormat:"dd/mm/yy",
defaultDate: "#{Date.today.day}/#{Date.today.month}/#{Date.today.year}",
change: function() {
var isoDate = this.getValue('yyyy-mm-dd');
$(this).attr('data-value', isoDate);
}
});
$('#enddate').datepicker({
changeYear: true,
dateFormat:"dd/mm/yy",
defaultDate: "#{Date.today.day}/#{Date.today.month}/#{Date.today.year}",
change: function() {
var isoDate = this.getValue('yyyy-mm-dd');
$(this).attr('data-value', isoDate);
}
});
});
%form{:action => employee_results_path(@employee), :class => 'navbar-search pull-left'}
.field
%input{:type =>'text', :placeholder => params[:startdate] != nil ? params[:startdate] : "from date", :id => 'startdate', :name => "startdate", :style => 'width: 100px'}
%input{:type =>'text', :placeholder => params[:startdate] != nil ? params[:enddate] : "to date", :id => 'enddate', :name => "enddate", :style => 'width: 100px'}
然后,在控制器中将参数捕获为变量并将它们解析为日期
sdate = Date.parse(params[:startdate])
edate = Date.parse(params[:enddate])
然后使用我在这个问题中收到的有用解决方案
@results = Result.where(:date => sdate..edate)
这是一种享受。感谢大家帮助我学习!