【问题标题】:Override the respond_to format with form button in rails 3使用rails 3中的表单按钮覆盖respond_to格式
【发布时间】:2014-04-18 18:23:40
【问题描述】:

我有一组使用 Rails 调用“respond_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 %>

注意上面的 3 个按钮标签,其中值是格式,参数“运行”将用于覆盖基于路由的格式。

响应代码(在控制器中生成报告后运行):

  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 中指定扩展名时,它起作用了,我正在寻找一种方法来使用上面名为“运行”的按钮中的按钮值来覆盖它。

提前谢谢你!

【问题讨论】:

    标签: ruby-on-rails-3 respond-to


    【解决方案1】:

    我现在终于可以回答我自己的问题了。所以这里是答案:

    我想出了如何做到这一点。您可以将按钮的名称设置为“格式”,并将值设置为您将附加到 URL 的扩展名。

     <%= button_tag( 'HTML', :value => 'html', :name => 'format' ) %>
     <%= button_tag( 'CSV', :value => 'csv', :name => 'format' ) %>
     <%= button_tag( 'JSON', :value => 'json', :name => 'format' ) %> 
    

    仅仅改变 params[:format] 是行不通的。您必须在操作运行之前将其传入。

    【讨论】:

    • 很棒,还与 formtastic semantic_form_for 合作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多