Кривая командной строки POST

Я пытаюсь смоделировать POST для моего простого веб-сервиса Rails. Файлы, созданные эшафотом, не были изменены. Когда я получаю данные POST из формы веб-сайта, запись создается правильно.

Когда я пытаюсь выполнить POST с curl, в базе данных создается запись, но она имеет значения NULL в полях, за исключением "updated_at" и "created_at". Я новичок в завивке командной строки, поэтому я не могу делать это правильно.

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

Я верну это от WEBrick:

Запущен POST "/flintstones" для 127.0.0.1 в Thu Apr 28 18:04:47 -0600 2011 Обработка FlintstonesController # create as Параметры: { "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

После GET для json

curl localhost: 3000/flintstones.json

Получаю:

[{ "кремень: {" Имя ": нулевой, "created_at":" 2011-04-29T00: 09: 58Z", "updated_at": "2011-04-29T00: 09: 58Z "," идентификатор ": 4," друг": нулевая}}]

Почему я получаю null в своих полях?

Спасибо заранее.

Ответы

Ответ 1

Я немного искал Google, и каждый пример использования curl с веб-службой rails показывает параметры, переданные в формате

object[paramName]=paramValue

а также один -d для каждого параметра, который сделает ваш оператор CURL похожим на

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

Вот источники, на которые я ссылаюсь:

Ответ 2

Rails (по умолчанию) не ищет тело сообщения, как указано, "name=Gazoo&friend=Rubble". Он ищет эту схему - если ваша модель - Flintstones, а ваши поля - имя и друг - "Flintstone[name]=Gazoo&Flintstone[friend]=Rubble". Это рельсовая DSL для почтового тела из сообщения формы.