2012-11-01 33 views
1

我正在做一些控制器渲染報道,這裏是我的問題:如何根據發送的數據更改響應格式?

用戶打開一個頁面,這讓它改變的下載格式和報告的日期形式。

通過選擇輸入設置下載格式。

當用戶按下按鈕我要響應取決於所選的格式。

問題是它通過url指定。所以試圖做這樣的事:

case format 
when "xlsx" then format.xlsx{...} 
when "html" then format.html{...} 
... 
end 

不起作用,因爲軌道或瀏覽器(我不知道)期望一個HTML響應。

我一直的,雖然兩個選項:

  1. 變化,這使得應用更加依賴於JavaScript的形式onsubmit的URL。要麼。

  2. redirect_to url + ".#{params[:download_format]}"

第二種方法看起來不如我,但我需要通過在URL中:report_date,我無法找到這樣做的方式。

我已經試過這樣:

url = my_custom_url_path 
redirect_to url + ".#{params[:download_format]}", :date_format => params[:date_format] 

但它不工作。

回答

1

在形式:

<%= f.select :download_format, { "xlsx" => "xlsx, "Online" => "html" } %> 

在控制器:

def action 
    if download_format = params[:download_format].delete 
     redirect_to my_action_path(options.merge(:format => download_format)) and return 
    end 
    # do some logic here 
    respond_to do |format| 
     format.xlsx{...} 
     format.html{...} 
    end 
end