Rails页面加载时的默认参数

时间:2012-11-20 20:52:38

标签: ruby-on-rails ruby

我有一个页面,我希望在给定的一周内显示数据库中的所有条目。数据库中的每个条目都有一个: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等日期,它可以正常工作。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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