2014-10-30 25 views
0

在RoR控制器中,我嘗試響應表單。強制將不同的響應格式導入到軌道中的表單

基於對我的控制器中的表單輸入的一些處理,我希望能夠選擇以CSV或HTML格式進行響應。 在HTML中響應正常,但CSV產生406不可接受。有沒有辦法強制我的迴應,以便用戶打印或下載一個CSV文件?

這裏是我的控制器:

#extract 
respond_to do |format| 
    if condition 
      format.csv { render_csv("licenses_#{Time.now.strftime("%Y%m%d")}") } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @license.errors, status: :unprocessable_entity } 
    end 
end 
    #extract 


    def render_csv(filename = nil) 
    filename ||= params[:action] 
    filename += '.csv' 

    if request.env['HTTP_USER_AGENT'] =~ /msie/i 
     headers['Pragma'] = 'public' 
     headers["Content-type"] = "text/plain" 
     headers['Cache-Control'] = 'no-cache, must-revalidate, post-check=0, pre-check=\ 
0' 
     headers['Content-Disposition'] = "attachment; filename=\"#{filename}\"" 
     headers['Expires'] = "0" 
    else 
     headers["Content-Type"] ||= 'text/csv' 
     headers["Content-Disposition"] = "attachment; filename=\"#{filename}\"" 
    end 
    render :layout => false 
    end 
+0

試圖通過添加以下內容到形式的行動('some_action_path(格式:CSV)'),然後在你的控制器加上'的respond_to做|格式| format.html format.csv end' – anusha 2014-10-30 05:59:19

+0

一旦提交表單,是否沒有辦法在Controller中做出響應格式的決定? – Antzi 2014-10-30 06:05:21

+0

以確定只有我們正在發送格式參數 – anusha 2014-10-30 06:08:31

回答

0

其實只是迫使模板的路徑奏效了:

 format.html { render_csv("licenses_#{Time.now.strftime("%Y%m%d")}", "licenses/create.csv.erb") } 
1

改變這一點,並嘗試一次

respond_to do |format| 
    if condition 
      format.csv { render_csv("licenses_#{Time.now.strftime("%Y%m%d")}") } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @license.errors, status: :unprocessable_entity } 
    end 
end 

更新:

$(document).ready(function(){ 
    $('#my_form').submit(function(){ 
      action = $(this).attr('action').val() 
      if($("#filed").val() == '') { 
       $("#format").val('csv') 
       $(this).attr('action').val(action + $("#format").val()) 
      } 
    }) 
}) 

變化根據您的要求

+0

你說得對,當我在這裏複製/粘貼我的代碼時,我確實犯了一個錯誤......我編輯了我的帖子。我的問題是,預期的響應是HTML,而不是CSV,我認爲... – Antzi 2014-10-30 07:12:24

+0

@antzi然後我們會做onething添加js來檢查參數值是否爲空或不是基於此我們將設置format參數併發送給控制器,然後我們會得到我們認爲我會更新我的答案等待 – anusha 2014-10-30 07:18:14

+0

@Antzi更新答案,請檢查一次 – anusha 2014-10-30 07:24:36

相關問題