如何用rails 3自定义表单按钮替换默认的respond_to模板?

更新于
2026-10-09 20:24:39
1阅读来源:SEO资源
  • 内容介绍
  • 相关推荐

本文共计558个文字,预计阅读时间需要3分钟。

如何用rails 3自定义表单按钮替换默认的respond_to模板?

我有使用Rails调用`respond_to`的各种格式来显示报告,例如针对URL、CSV或JSON格式的结尾,使用相应格式生成报告。我有一个请求来制作一个下载按钮,以便更轻松地抓取报告,但由于报告包含日期范围。

我有一组使用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个按钮标签,其中值是格式,参数“run”将用于覆盖基于路径的格式.

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

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”的按钮中的按钮值来覆盖它的方法.

先感谢您!

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

我想出了如何实现这一目标.您可以将按钮的名称设置为“格式”,并将值设置为您要附加到URL的扩展名.

如何用rails 3自定义表单按钮替换默认的respond_to模板?

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

简单地更改参数[:format]不起作用.您必须在操作运行之前传递它.

本文共计558个文字,预计阅读时间需要3分钟。

如何用rails 3自定义表单按钮替换默认的respond_to模板?

我有使用Rails调用`respond_to`的各种格式来显示报告,例如针对URL、CSV或JSON格式的结尾,使用相应格式生成报告。我有一个请求来制作一个下载按钮,以便更轻松地抓取报告,但由于报告包含日期范围。

我有一组使用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个按钮标签,其中值是格式,参数“run”将用于覆盖基于路径的格式.

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

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”的按钮中的按钮值来覆盖它的方法.

先感谢您!

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

我想出了如何实现这一目标.您可以将按钮的名称设置为“格式”,并将值设置为您要附加到URL的扩展名.

如何用rails 3自定义表单按钮替换默认的respond_to模板?

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

简单地更改参数[:format]不起作用.您必须在操作运行之前传递它.