ruby-on-rails - 可以在 form_for helper rails 3 中发送多种格式

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 form-for

是否可以发送不止一种格式,比如:

<%= form_for(@post, :format => :json, :csv, :xml) do |f| %>
  ...
<% end %>

非常感谢!

最佳答案

您不是“发送格式”,而是向服务器发送请求,服务器以指定的格式响应此请求。您可以使用参数来告诉 Controller 您希望它返回哪种格式。

有几种方法可以告诉 Controller 您想要哪种格式。其实只有一种方式,传递一个参数,但是传递这个参数有几种方式。

我喜欢 hidden_​​field 方法,您可以在其中添加一个值为您想要的格式的隐藏字段,并在用户选择具有该格式的单选按钮时使用 javascript 更改该字段的值,例如。您还可以使用多个提交按钮来执行此操作,并将 HTML 的 onClick 属性设置为更改 hidden_​​field 值的函数。

示例(我将使用多按钮方法,并使用 jQuery):

首先,让我们构建表单:

<%= form_for(@post, :format => :json, :csv, :xml) do |f| %>

...

<%= f.hidden_field :random_param_name, :value => "default format value" %>

// Notice you should use f.submit here instead of button_tag, because it's a form_for, not a form_tag

<%= f.submit "Give me XML!", :onClick => "changeFormat('xml');" %>
<%= f.submit "Give me JSON!", :onClick => "changeFormat('json');" %>
<%= f.submit "Give me CSV!", :onClick => "changeFormat('csv');" %>

<% end %>

现在我们添加 changeFormat 函数:

<script type="text/javascript">
    function changeFormat(format) {
        // The ID here is in the format "model_name_field_name". This is default for any form_for.
        $("#post_random_param_name").val(format);
    }
</script>

现在您只需要在 Controller 中捕获此参数 (params[:post][:random_param_name]) 并执行您必须执行的操作!您需要做的最后一件事是将此 random_param_name 添加到 Post 模型的可访问属性中:

attr_accessor :random_param_name
attr_accessible :random_param_name

关于ruby-on-rails - 可以在 form_for helper rails 3 中发送多种格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13453386/

相关文章:

ruby - 用于测试数组的无的 RSpec 魔法?方法?

ruby-on-rails - Rails 地理编码模型中的两种方式

ruby-on-rails - Rails 3/Bundler gem : 'undefined method ` setup' for Bundler:Module (NoMethodError)'

javascript - 格式为 JS 时渲染无布局(需要干燥)

ruby-on-rails - 使用日历表格设置日期

html - ERB/Rails 中关闭 </a> 标记的正确缩进

mysql - 在 MySQL 中工作的 SQL 语句在 Postgresql 中不起作用 - Sum 和 group by Rails 3

ruby-on-rails - 是否可以让 rails i18n 语言环境相互回退?

ruby-on-rails - Rails 的 Markdown gem

javascript - 创建一个 "repin"类型的操作,但为每个用户提供唯一的描述