Ruby on rails 页面加载时的Rails默认参数
我有一个页面,我想显示一周内数据库中的所有条目。数据库中的每个条目都有一个:entrydate字段,其中包含该条目的日期 在/config/routes.rb中:Ruby on rails 页面加载时的Rails默认参数,ruby-on-rails,ruby,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 @r
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之类的日期,它可以正常工作。看起来您的变量可能在路由和控制器之间丢失。也许可以尝试在控制器本身中声明默认日期
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
看起来您的变量可能在路由和控制器之间丢失。也许可以尝试在控制器本身中声明默认日期
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
似乎您的默认值设置不正确。也许这是因为它不是一个常数 无论如何,您可能不希望这样设置默认值,因为您无法控制何时设置默认值 我认为这样的方法会更好:
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)
似乎您的默认值设置不正确。也许这是因为它不是一个常数 无论如何,您可能不希望这样设置默认值,因为您无法控制何时设置默认值 我认为这样的方法会更好:
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)