I have a newbie question about creating a new item using REST in rails
1.2.
1. I created my project:
'rails mra -d sqlite3'
2. I generate all I can:
'cd mra'
'script/generate scaffold_resource widget name:string
description:string'
3. I create database stuff:
'rake db:migrate'
4. I now have a basic app:
'script/server'
I create a couple of widgets using the basic scaffolding forms.
5. I browse 'http://localhost:3000/widgets.xml’ I get a nice xml file
out:
<?xml version="1.0" encoding="UTF-8" ?>
<widgets>
<widget>
<description>baz-ness</description>
<id type="integer">1</id>
<name>baz</name>
</widget>
<widget>
<description>foo-ness</description>
<id type="integer">2</id>
<name>foo</name>
</widget>
</widgets>
6. I can use curl to POST a new widget to the app:
'curl -d "widget[name]=bar" -d "widget[description]=bar-ness" \
http://localhost:3000/widgets’
With a default app generated this way, is there a way to use curl to
POST an XML file and generate a new widget? I do not think the
'create' method in widgets_controller.rb distinguishes between the two
URL's used for a POST (/widgets and /widgets.xml) as far as how input
is handled, and I am not sure how params[:widget] is populated (other
than knowing that it is not populated correctly when I try something
like this:
'curl -X POST -d \
"<widget><name>foobar</name><description>foobar-ness</description></
map.resources automatically recognizes urls with formats (extensions
like xml and js by default). XML has a default param parser that uses
the xmlsimple lib to parse that xml into a hash in params[:widget].
Your controller code should stay the same then. If you have custom
formats (atom, svn xml, json, whatever), you'll have to write your own
param parser.
You also might use the filename notation with curl to avoid having to
type the xml message on the command line. Just create a file
new_widget.xml and then send it using curl:
I will have to experiment with just submitting an XML file, but i
_thought_ when I tried this w/o the Content-Type header ,it created a
null widget: ID only blank attributes.