2011-04-29 165 views
15

我試圖模擬POST到我簡單的Rails腳手架Web服務。腳手架創建的文件沒有改變。當我從網站表單發佈數據時,正確創建了一條記錄。curl命令行POST

當我嘗試使用curl進行POST時,數據庫中會創建一條記錄,但它的字段中有NULL值,'updated_at'和'created_at'除外。我是新來的命令行卷曲,所以我可能沒有正確地做。

curl -d "name=Gazoo&friend=Rubble" localhost:3000/flintstones 

我回來這從​​使用WEBrick:

開始POST 「/摩登原始人」 爲127.0.0.1,在週四04月28日18時04分47秒-0600 2011處理由FlintstonesController#創建爲參數: {「name」=>「Gazoo」,「friend」=>「Rubble」} AREL(0.3ms)INSERT INTO「flintstones」(「name」,「friend」,「created_at」,「updated_at」)VALUES(NULL, NULL, '2011-04-29 00:04:47.779902', '2011-04-29 00:04:47.779902')重定向到http://localhost:3000/flintstones/4

後查看該JSON

捲曲本地主機:3000/flintstones.json

我收到:

[{ 「打火石:{」 名 「:空,」 created_at 「:」 2011- 04-29T00:09:58Z「,」updated_at「:」2011-04-29T00:09:58Z「,」id「:4,」friend「:null}}]

爲什麼我會在我的空字段?

在此先感謝。

+0

看來url參數沒有傳遞給sql插入,而是NULL插入。 – 2011-04-29 00:51:27

+0

這是正確的丹。我的問題是爲什麼? – Kurt 2011-04-29 01:14:40

回答

22

我GOOGLE了一下,使用curl與軌道網絡服務的每一個示例顯示了格式傳遞的參數

object[paramName]=paramValue

以及每個參數這將使一個-d設置你的捲曲聲明樣子

curl -d "flintstone[name]=Gazoo" -d "flintstone[friend]=Rubble" localhost:3000/flintstones

下面是我引用來源:

+0

謝謝傑夫。我看過你引用的第二個來源,這沒有幫助。第一個,我沒有看到,是有幫助的。你上面的解決方案做到了。現在開始爲我的試用iOS應用程序使用ASIHttpFormRequest或RestKIT。 – Kurt 2011-04-29 01:13:42

+0

看看格式化如何讓博客文章對讀者來說更有效率。 – 2011-04-29 01:39:08

+0

如果您需要驗證,請看這裏:https://robots.thoughtbot.com/curling-with-rails-authenticity-token。幾個參數也可以使用& – Zane 2016-11-08 18:39:04

3

的Rails(默認)不找後身體的方式提供, 「name=Gazoo&friend=Rubble」。它尋找這個計劃 - 因爲你的模型是Flintstones,你的領域是名字和朋友 - 「Flintstone[name]=Gazoo&Flintstone[friend]=Rubble」。這是來自表單發佈的郵件主體的DSL。