在Rails 3.2中查询日期范围无效

时间:2013-03-22 20:19:37

标签: ruby-on-rails ruby-on-rails-3

我有一个报告页面,可以生成事件报告。有一个日期选择器,用户可以输入日期范围(例如3月1日 - 3月20日),并返回事件的:start_at在该范围内开始的所有事件。我最近从Rails 3.0.11升级到Rails 3.2.13(我小心地直接关注RailsCasts剧集并从3.0跳到3.1然后从3.1跳到3.2)并注意到我的报告不再有效但我没有做任何更改事件控制器或事件模型。我的代码如下:

events_controller.rb

def reports
  if !params[:report_start].blank? && !params[:report_end].blank?
    @events = current_user.events.report(params[:report_start], params[:report_end])
  else
    @events = current_user.events.where(params[:search]).order(sort_column + " " + sort_direction)
  end

  respond_to do |format|
    format.html do
      @events = @events.paginate(:per_page => 5, :page => params[:page]) 
    end
    format.xml  { render :xml => @events }
    format.pdf do
      pdf = ReportPdf.new(@events)
      send_data pdf.render, filename: "Event_Report.pdf",
                          type: "application/pdf"
    end
  end
end

event.rb

def self.report(report_start, report_end)
  where(:start_at => report_start.to_date..report_end.to_date)
end

在升级过程中,此类查询的语法是否已在某处更改?

我确认Rails仍然以相同的格式保存日期,并且它在其他任何地方都能正常工作。 Rails控制台中的日期输出如下所示:

start_at: "2013-04-25 00:00:00"

任何帮助都会受到赞赏,因为这让我发疯,看起来对我来说是正确的。谢谢!

修改:我在主题上找到了 this Stack Overflow post ,看起来响应说按照我的方式进行,但一切都没有发生。

在生成报告后,URL确实会发生变化,生成的URL如下所示:

http://localhost:3000/reports?utf8=%E2%9C%93&direction=&sort=&event%5Breport_start%5D=&event%5Breport_end%5D=&commit=Generate+Report

2 个答案:

答案 0 :(得分:1)

我知道我正在回答我自己的问题,但我想发布解决方案,以防其他人遇到此问题,因为我能够让这个工作。问题似乎是由于Rails处理时间不同。新代码如下:

http://pastie.org/7107095

答案 1 :(得分:0)

试试这个:

def self.report(report_start, report_end)
  where('start_dt >= ? and end_dt <= ?',report_start,report_end)   
end