我有一个表单(代码段)
<% 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根目录下组合它们
答案 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
的说明