Rails形成多个参数XML

时间:2010-04-06 14:02:22

标签: ruby-on-rails xml webforms

我有一个表单(代码段)

<% form_for(@transfer, :html => {:multipart => true}) do |f| %>
  <p>
    <%= f.label :source %><br />
    <%= f.text_field :source %>
  </p>
  <p>
    <%= f.label :destination %><br />
    <%= f.text_field :destination %>
  </p>

  <% fields_for :upload do |u| %>
    <p>
      <%= u.label :upload %><br />
      <%= u.text_field :upload %>
    </p>
  <% end %>

  <p>
    <%= f.submit 'Create' %>
  </p>
<% end %>

<%= link_to 'Back', transfers_path %>

所以现在在我的转让控制器中,我可以这样做:

@transfer = Transfer.new(params[:transfer])
@upload   = Upload.find_or_create_by_md5(params[:upload])

我可以通过简单地将参数更改为XML来发布到XML的单个表单,如

<transfer>
    <source>foo</source>
    <destination>bar</destination>
</transfer>

<upload>
    <upload>baz</upload>
</upload>

但我无法弄清楚如何在同一个XML根目录下组合它们

2 个答案:

答案 0 :(得分:0)

假设您使用的是Rails 2.3.x,您可能需要考虑将accepts_nested_attributes_for添加到Transfer模型中。请参阅what-s-new-in-edge-rails-nested-attributes

答案 1 :(得分:0)

好吧,我还没弄清楚如何为XML做这个,所以现在我不得不满足于使用REST。我遇到了RestClient库,并查看了源代码,发现你可以做这样的嵌套参数:

RestClient.post( url, 
  { 
    :transfer => {
    :path => '/foo/bar',
    :owner => 'that_guy',
    :group => 'those_guys'
  },
  :upload => {
    :file => File.new(path)
  }
})

向作者发送关于记录功能here

的说明