是否可以发送不止一种格式,比如:
<%= 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/