Ruby on rails 以其他格式呈现时如何传递参数哈希?
我有这样的问题:我正在获取当前用户的报告,并且取决于日期,这些日期是从输入中获取的。 但我需要用xls扩展将它们传递到同一个页面,现在我遇到了这样的错误-Ruby on rails 以其他格式呈现时如何传递参数哈希?,ruby-on-rails,render,params,Ruby On Rails,Render,Params,我有这样的问题:我正在获取当前用户的报告,并且取决于日期,这些日期是从输入中获取的。 但我需要用xls扩展将它们传递到同一个页面,现在我遇到了这样的错误- undefined method each for nil:NilClass 这是我的控制器: def index if params[:report] && params[:report][:start_date] && params[:report][:end_date] @start_da
undefined method each for nil:NilClass
这是我的控制器:
def index
if params[:report] && params[:report][:start_date] && params[:report][:end_date]
@start_date = params[:report][:start_date]
@end_date = params[:report][:end_date]
@financial_reports = current_user.financial_reports.where(:created_at => @start_date.to_date..@end_date.to_date)
respond_to do |format|
format.html # index.html.erb
format.xls
format.xml { render :xml => @financial_reports }
end
end
end
这是我的index.xls.erb
它正在工作,但是当我添加WHERE condition-error时
那么,如何传递到xml视图中呢?创建一个名为“app/views//index.xml.erb”的视图 并将您的视图粘贴到其中(所有带有erb标记的XML位等等) 在控制器中
respond_to do |format|
format.html
format.xls
format.xml
end
current_user.financial_reports.where("financial_reports.created_at between ? and ?",params[:start_date].to_date,params[:end_date].to_date)
表示您正在处理一个nil对象,在本例中是@financial\u reports
。为什么?可能是因为数据库中没有符合WHERE
条件的记录
在这种情况下,应该实现对nil对象的检查,而不是渲染xls
redirect_to <your_path_here> if @financial_reports.emtpy?
respond_to do |format|
....
致:
它们将像html视图一样被传递到xls视图中,xls视图中可能还有其他问题,您能在xls视图中发布相关代码吗?@ZelluX,这很奇怪,因为当我编写
@financial\u reports=FinancialReport时它正在工作。所有的您的建议对我不起作用(我有.xls.erb文件,它正在为案例工作,我在之前的评论中提到过,你需要调查哪一行在抱怨nil?然后调查为什么当你不希望它是nil时,该对象是nil。Aditya Sanghi,这一行
。但我不明白为什么…我找到了它。它处于何处状态。你能帮忙吗?当然可以你基本上想搜索两个日期之间的创建,对吗?就这些参数“@start\u date=params[:report][:start\u date]@end\u date=params[:report][:end\u date]`没有进入.xls页面。如果没有它,它就会工作。那些参数自然不会存在于你的.xls页面中。你的控制器正在使用这些变量构造WHERE
SQL语句。请在你的问题中粘贴开发日志,看看到底发生了什么。布兰登·杰尼根,你能帮我吗?
@financial_reports = current_user.financial_reports
respond_to do |format|
format.html
format.xls
format.xml
end
current_user.financial_reports.where("financial_reports.created_at between ? and ?",params[:start_date].to_date,params[:end_date].to_date)
undefined method each for nil:NilClass
redirect_to <your_path_here> if @financial_reports.emtpy?
respond_to do |format|
....
if params[:report] && params[:report][:start_date] && params[:report][:end_date]
@start_date = params[:report][:start_date]
@end_date = params[:report][:end_date]
@financial_reports = current_user.financial_reports.where(:created_at => @start_date.to_date..@end_date.to_date)
if params[:start_date] && params[:end_date]
@financial_reports = current_user.financial_reports.where("financial_reports.created_at between ? and ?", params[:start_date].to_date, params[:end_date].to_date)