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

event.rb

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

このようなクエリの構文は、アップグレード プロセスのどこかで変更されましたか?

Rails がまだ同じ形式で日付を保存しており、他の場所でも正しく機能していることを確認しました。Rails Console の日付出力は次のようになります。

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

これは私を夢中にさせ、私には正しいように見えるので、どんな助けもいただければ幸いです。ありがとう!

編集:トピックに関するこのスタック オーバーフローの投稿を見つけました。その応答は、私のやり方でそれを行うように指示されているようですが、何も起こっていません。

レポートを生成するためにクリックした後、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 に答える