У меня есть приложение 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
А затем представление отображается обычным способом. Если пользователю нравится то, что он видит, он может экспортировать отчет в формате 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) %>
У меня вопрос: есть ли лучший способ передать эти параметры в метод экспорта? Спасибо.