如何根据发送的数据更改响应格式?

时间:2012-11-01 18:51:26

标签: ruby-on-rails

我正在做一些控制器来呈现报告,这是我的问题:

用户打开一个页面,其中包含一个表单,可以更改下载格式和报告日期。

通过选择输入设置下载格式。

当用户按下我想要响应的按钮时,取决于所选的格式。

问题是它是通过url指定的。所以尝试做类似的事情:

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

不起作用,因为rails或浏览器(我不确定)需要html响应。

我有两种选择:

  1. 更改表单onsubmit的网址,使应用程序更依赖于javascript。或

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

  3. 第二种方式对我来说看起来更好,但我需要在网址中传递:report_date,我找不到办法。

    我试过这个:

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

    但它不起作用。

1 个答案:

答案 0 :(得分: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