Ruby on rails Rails-按日期范围筛选

Ruby on rails Rails-按日期范围筛选,ruby-on-rails,Ruby On Rails,正在尝试创建筛选器选择以查找给定日期范围内包含coursedates的计划: 管理员控制器: 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 => {:course

正在尝试创建筛选器选择以查找给定日期范围内包含coursedates的计划:

管理员控制器:

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
查找明细表视图:

<% 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 %>
我似乎总是对日期/日期时间的事情有困难。coursedate是schedules表中的datetime字段,如果这有什么区别的话。我只需要搜索日期,不需要搜索时间。由于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| %>

出现此错误是因为range函数不支持哈希,在本例中传递哈希:

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 
所以


结束日期也一样。

非常感谢您的回复。Datetime积垢让我困惑。我尝试了您的修复,但收到:ArgumentError字符串与0的比较失败我还尝试了:start_date=params[:start_date]。值在:月、:日、:年。。。有什么想法吗?再次感谢编辑原始响应:您需要使用to_i将每个参数从字符串转换为整数。。。正在获取另一个错误,但我应该能够解决它:ActionView::TemplateError未定义的nil:NilClass方法'each',位于/admin/find_results.html.erb:26的第26行:在find_results的控制器操作中,您需要@schedules=Schedule.find:all,:conditions=>。如果没有找到任何匹配项,它将返回一个空数组。因为您得到的是nil而不是空数组,所以您必须执行其他操作。
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)