Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 传递参数的优雅方式_Ruby On Rails - Fatal编程技术网

Ruby on rails 传递参数的优雅方式

Ruby on rails 传递参数的优雅方式,ruby-on-rails,Ruby On Rails,我有一个Rails应用程序,它具有生成报告的功能 在生成报告之前,将向用户显示一个表单,用于指定报告的日期范围 <%= form_tag({:action => :generate_report}, :multipart => true) do %> <h3>Date range is inclusive</h3> <b>Start Date</b><br /> <%= date

我有一个Rails应用程序,它具有生成报告的功能

在生成报告之前,将向用户显示一个表单,用于指定报告的日期范围

<%= form_tag({:action => :generate_report}, :multipart => true) do %>

    <h3>Date range is inclusive</h3>

    <b>Start Date</b><br />
    <%= date_select :range, :startDate, options = {:order => [:day, :month, :year]} %

    <b>End Date</b><br />
    <%= date_select :range, :endDate, options = {:order => [:day, :month, :year]} %>

    <%= submit_tag "Generate Report", :disable_with => 'Reporting...' %>

<% end %>
# GET /sales_activities/generate_report
def generate_report

    @start_date = Date.civil(params[:range][:"startDate(1i)"].to_i,params[:range][:"startDate(2i)"].to_i,params[:range][:"startDate(3i)"].to_i)
    @end_date   = Date.civil(params[:range][:"endDate(1i)"].to_i,params[:range][:"endDate(2i)"].to_i,params[:range][:"endDate(3i)"].to_i)

    @end_date_inclusive = @end_date + 1.day

    @sales = SalesActivity.find(:all,
                 :select => [:salesperson_id],
                 :conditions => {:created_at => @start_date..@end_date_inclusive, :code => [5]},
                 :group => :salesperson_id)

    # <Skip the boring code>

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml  => @report }
      format.json { render :json => @report }
    end
  end
然后,支持代码生成报告

<%= form_tag({:action => :generate_report}, :multipart => true) do %>

    <h3>Date range is inclusive</h3>

    <b>Start Date</b><br />
    <%= date_select :range, :startDate, options = {:order => [:day, :month, :year]} %

    <b>End Date</b><br />
    <%= date_select :range, :endDate, options = {:order => [:day, :month, :year]} %>

    <%= submit_tag "Generate Report", :disable_with => 'Reporting...' %>

<% end %>
# GET /sales_activities/generate_report
def generate_report

    @start_date = Date.civil(params[:range][:"startDate(1i)"].to_i,params[:range][:"startDate(2i)"].to_i,params[:range][:"startDate(3i)"].to_i)
    @end_date   = Date.civil(params[:range][:"endDate(1i)"].to_i,params[:range][:"endDate(2i)"].to_i,params[:range][:"endDate(3i)"].to_i)

    @end_date_inclusive = @end_date + 1.day

    @sales = SalesActivity.find(:all,
                 :select => [:salesperson_id],
                 :conditions => {:created_at => @start_date..@end_date_inclusive, :code => [5]},
                 :group => :salesperson_id)

    # <Skip the boring code>

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml  => @report }
      format.json { render :json => @report }
    end
  end
然后以通常的方式渲染视图。如果用户喜欢他们看到的内容,那么他们可以选择将报告导出为csv

目前,我有以下代码将指定的范围传递给生成相同报告以进行导出的方法,但它似乎不是很好,errrr,good,并且会导致长URL

<h2>Regulatory Report</h2>

<h4>Reporting Period from <%= @start_date.strftime('%d/%m/%y') %> to <%= @end_date.strftime('%d/%m/%y') %></h4>

  <%= link_to image_tag("Buttons/ExportReport.png", :border => 0), report_export_sales_activities_path(:start_date_str => @start_date, :end_date_str => @end_date) %>

我的问题是,有没有更好的方法将这些参数传递给导出方法?谢谢。

AR将允许您直接使用日期选择帮助程序生成的参数格式

@sales = SalesActivity.where(['(created_at BETWEEN ? AND ?', params[:range][:start_date], params[:range][:end_date]])

使用POST请求将使您的参数远离URL,并将其缩短一点。这就是你想要的吗?