Ruby on rails 以其他格式呈现时如何传递参数哈希?

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

我有这样的问题:我正在获取当前用户的报告,并且取决于日期,这些日期是从输入中获取的。 但我需要用xls扩展将它们传递到同一个页面,现在我遇到了这样的错误-

    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)