0

我有一个生成事件报告的报告页面。有一个日期选择器,用户可以输入一个日期范围(例如 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

事件.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"

任何帮助将不胜感激,因为这让我发疯并且对我来说看起来是正确的。谢谢!

编辑:我在该主题上找到了这篇 Stack Overflow 帖子,看起来回复说要按我的方式做,但什么也没发生。

单击生成报告后,URL 确实发生了变化,生成的 URL 如下所示:

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

2 回答 2

1

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

http://pastie.org/7107095

于 2013-03-25T05:28:26.143 回答
0

尝试这个:

def self.report(report_start, report_end)
  where('start_dt >= ? and end_dt <= ?',report_start,report_end)   
end
于 2013-03-22T22:38:09.647 回答