2012-11-20 46 views
1

我有一個頁面,我想要顯示給定週數據庫中的所有條目。數據庫中的每個條目都有一個:entrydate字段,其中包含條目的日期。頁面加載時的Rails默認參數

在/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 

然而,當我嘗試運行頁面本地主機:3000 /報道,我得到一個錯誤:

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 /報告/ 10 /二千〇一十二分之二十九。

回答

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) 
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 
相關問題