2011-11-29 11 views
0

보고서를 생성하는 기능이있는 레일스 애플리케이션이 있습니다.매개 변수를 전달하는 우아한 방법

보고서를 생성하기 전에, 사용자는

# 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 => @[email protected]_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 %> 

지지 코드는 그 리포트를 생성하고,보고를위한 기간을 지정하는 형태로 제시 보기는 일반적인 방법으로 렌더링됩니다. 사용자가 보는 것을 좋아하면 보고서를 CSV 형식으로 내보낼 수 있습니다.

현재 내 보낸 내보내기에 대해 동일한 보고서를 생성하는 메서드에 지정된 범위를 전달하는 데 다음 코드가 있지만 매우 길고 오류가 많지 않으며 긴 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) %> 

제 질문은 이러한 매개 변수를 내보내기 방법에 전달하는 더 좋은 방법이 있습니까? 고맙습니다.

+0

에 의해 생성 된 PARAMS 형식을 사용하게됩니다. http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html 그게 당신이 원하는 것입니까? –

답변

1

AR 당신이 URL에서 당신의 매개 변수를 유지하고 조금 그것을 단축 할 POST 요청을 사용하여 date_select 도우미 직접

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