2014-04-18 65 views
2

我有一組使用Rails調用「respond_to」以各種格式顯示的報表,例如,如果URL以CSV或JSON結尾,則生成報表格式。在rails 3中用表單按鈕覆蓋respond_to格式

我有一個請求來製作一個下載按鈕,使抓取報告更容易,但由於報告具有日期範圍等自定義功能,因此我需要能夠提交一個表單並在表單中指定響應格式。這可能嗎?如何做呢?

表單代碼:

<%= 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個鍵標籤之上,其中的值是格式和PARAM「運行」將被用於替代基於路由的格式。

迴應到代碼(報告後,運行在控制器中生成):

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」的按鈕中的按鈕值。

預先感謝您!

回答

4

現在我終於可以迴應我自己的問題了。所以這裏是答案:

我想出瞭如何實現這一點。您可以將按鈕的名稱設置爲「格式」,並將值設置爲您要附加到URL的擴展名。

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

只是更改params [:format]不起作用。你必須在你的行動開始之前通過它。

+0

謝謝你克里斯,被困在這個多年 – user3868832