1

特定の週のデータベース内のすべてのエントリを表示するページがあります。データベースの各エントリには、エントリの日付を含む :entrydate フィールドがあります。

/config/routes.rb で:

match "reports/*date" => "reports#index", :defaults => { :date => DateTime.now.strftime('%m/%d/%Y') }

/app/controllers/reports_controller.rb:

def index
  @reports = Report.where(:entrydate => Date.strptime(params[:date], '%m/%d/%Y').beginning_of_week..Date.strptime(params[:date], '%m/%d/%Y').end_of_week)

  respond_to do |format|
    format.html # index.html.erb
    format.json { render :json => @reports }
    format.js
  end
end

ただし、ページ localhost:3000/reports を実行しようとすると、エラーが発生します。

can't dup NilClass
/app/jruby-1.6.5.1/lib/ruby/1.8/date/format.rb:599:in `_strptime'
/app/jruby-1.6.5.1/lib/ruby/1.8/date.rb:979:in `strptime'
app/controllers/reports_controller.rb:7:in `index'

localhost:3000/reports/10/29/2012 などの日付を入力すると問題なく動作します。

4

2 に答える 2

1

デフォルト値が正しく設定されていないようです。おそらくこれは定数ではないからでしょうか?

とにかく、デフォルトがいつ設定されるかを制御することができないため、おそらくこのようにデフォルトを設定したくないでしょう。

私はこのようなものがより良いアプローチになると思います:

def index
  my_date = params[:date] || DateTime.now.strftime('%m/%d/%Y')
  @reports = Report.where(:entrydate => Date.strptime(my_date, '%m/%d/%Y').beginning_of_week..Date.strptime(my_date, '%m/%d/%Y').end_of_week)
于 2012-11-20T21:08:57.397 に答える
0

ルートとコントローラーの間で変数が失われているようです。コントローラー自体の中でデフォルトの日付を宣言してみてはいかがでしょうか?

def index
params[:date].blank? ? date = DateTime.now.strftime('%m/%d/%Y') : date = params[:date] 
  @reports = Report.where(:entrydate => Date.strptime(date, '%m/%d/%Y').beginning_of_week..Date.strptime(date, '%m/%d/%Y').end_of_week)

  respond_to do |format|
    format.html # index.html.erb
    format.json { render :json => @reports }
    format.js
  end
end
于 2012-11-20T21:07:42.460 に答える