Posting xml to create new record

Hello,

I noticed that with the latest version of Rails, scaffolding in the controller already has resourceful methods. Based on the comments in the code, it seems that all of this is built in, but I'm having some trouble with creating new records by posting xml data.

I have a SubversionRepository model and SubversionRepositories controller. When I access /subversion_repositories.xml I get a list of repositories in a format like:

<?xml version="1.0" encoding="UTF-8"?> <subversion-repositories type="array">   <subversion-repository>     ...     <name>repo1</name>     <group>group1</group>   </subversion-repository>   <subversion-repository>     ...   </subversion-repository> </subversion-repositories>

Based on this format, I tried posting a new repository to the address /subversion_repositories.xml using the following xml.

<subversion-repository>   <name>newrepo</name>   <group>newgroup</group> </subversion-repository>

I store this in the file repo.xml and post it using the following code.

require 'net/http' require 'uri' require 'rexml/document'

file = File.new "repo.xml" xml_document = REXML::Document.new(file)

puts "sending XML in http POST" http_client = Net::HTTP.new('localhost', 3000) http_result = http_client.post('/subversion_repositories.xml', xml_document.to_s) puts "result type: " + http_result.class.name puts "result: " + http_result.body.to_s

The script returns the following output.

sending XML in http POST result type: Net::HTTPClientError result: <?xml version="1.0" encoding="UTF-8"?> <errors>   <error>Name can't be blank</error>   <error>Group can't be blank</error> </errors>

The log file has an entry similar to the following.

Processing SubversionRepositoriesController#create (for XXXXX at 2008-03-13 14:54:00) [POST]   Session ID: XXXXX   Parameters: {"format"=>"xml", "action"=>"create", "controller"=>"subversion_repositories", "<subversion-repository>\n <name>newrepo</name>\n <group>newgroup</group>\n <created-at type"=>"'datetime' nil='true'/>\n <updated-at type='datetime'>2008-03-12T16:15:51-05:00</updated-at>\n </subversion-repository>"} Completed in 0.01600 (62 reqs/sec) | Rendering: 0.00000 (0%) | DB: 0.00000 (0%) | 422 Unprocessable Entity [http://localhost/subversion_repositories.xml\]

Does anyone know what I'm doing wrong? Does this functionality not come built in?

Thanks for your help. Justin

Have you tried headers = {'Content-Type' => 'text/xml'} http_result = http_client.post('/subversion_repositories.xml', xml_document.to_s,headers)

ESPNDev@gmail.com wrote:

Have you tried headers = {'Content-Type' => 'text/xml'} http_result = http_client.post('/subversion_repositories.xml', xml_document.to_s,headers)

That is exactly what I needed. Thanks!