Anule el formato respond_to con el botón de formulario en los rieles 3

Tengo un conjunto de informes que se muestran en varios formatos utilizando la llamada de Rails "responder_to", de modo que si la URL termina en CSV o JSON, el informe se genera en ese formato.

Tenía una solicitud para hacer un botón de descarga para facilitar la obtención de informes, pero dado que los informes tienen personalizaciones como rangos de fechas, necesito poder enviar un formulario y especificar un formato de respuesta en el formulario. es posible? ¿Cómo puede hacerse esto?

Código de formulario:

<%= 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 %>

Tenga en cuenta las 3 etiquetas de botón anteriores donde el valor es el formato y el parámetro 'ejecutar' se usaría para anular los formatos basados en rutas.

Código de respuesta (se ejecuta después de generar el informe en el controlador):

  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

Cuando especifico la extensión en la URL, eso funciona, lo que estoy buscando es una forma de anular eso usando un valor de botón en los botones llamados "ejecutar" arriba.

¡Gracias de antemano!

Respuestas a la pregunta(1)

Su respuesta a la pregunta