Переопределить формат response_to с помощью кнопки формы в направляющих 3
У меня есть набор отчетов, которые отображаются в различных форматах с помощью вызова Rails «response_to», так что если URL заканчивается в CSV или JSON, отчет генерируется в этом формате.
У меня был запрос на создание кнопки загрузки, чтобы упростить захват отчетов, но поскольку отчеты имеют такие настройки, как диапазоны дат, я должен иметь возможность отправить одну форму и указать формат ответа в форме. Это возможно? Как это можно сделать?
Код формы:
<%= form_tag('', method: 'get') do %>
<%= hidden_field_tag('s',params[:s]) %>
<%= select_tag "date_interval", options_from_collection_for_select(Admin::ReportController::DATE_INTERVALS.to_a, 'first', 'last') %>
<%= label_tag('start_at','Start at') %> <%= text_field_tag('start_at', @start_at, class: 'datetimeselect') %>
<%= label_tag('end_at','End at') %> <%= text_field_tag('end_at', @end_at, class: 'datetimeselect') %>
<script>
$('.datetimeselect').datetimepicker({format: "Y-m-d H O"});
</script>
<%= button_tag( 'HTML', :value => 'html', :name => 'run' ) %>
<%= button_tag( 'CSV', :value => 'csv', :name => 'run' ) %>
<%= button_tag( 'JSON', :value => 'json', :name => 'run' ) %>
<% end %>
Обратите внимание на три тега кнопки выше, где значение является форматом, а параметр 'run' будет использоваться для переопределения форматов на основе маршрута.
Код ответа (запускается после генерации отчета в контроллере):
def format_results
respond_to do |format|
format.html {
# default render of HTML table
}
format.json {
render json: { results: @results[:results], header: @results[:header], name: @results[:name], stats: { rows: @results.count } }, layout: false
}
format.csv {
render text: report_to_csv( @results ), content_type: 'text/csv', layout: false
}
end
end
Когда я указываю расширение в URL, это работает, и я ищу способ переопределить это, используя значение кнопки в кнопках с именем «run» выше.
Заранее спасибо!