Данные POST JSON для простого использования рельсов с завихрением

Я установил простое новое приложение rails с вводом модели, с атрибутами title и content, используя строительные леса.

теперь я пытаюсь использовать curl для POST-данных JSON (вместо использования браузера).

кажется, что работает (то есть успешно отправлено с нулевыми данными):

curl --verbose --header "Accept: application/json" --header "Content-type: application/json" --request POST --data "" http://localhost:3000/entries

следующее не работает:

curl --verbose --header "Accept: application/json" --header "Content-type: application/json" --request POST --data "{'content':'I belong to AAA','title':'AAA'}" http://localhost:3000/entries

Я пробовал много вариантов. ошибки, которые я получаю, являются главным образом не найденным или неожиданным токеном в данных JSON.

Ответ 1

Чтобы согласиться с тем, что сказал Джонатан, Post теперь отправляет данные в ControlController. Теперь в вашем действии create вам нужно получить данные из хэша params. Я собираюсь предположить, что вы делаете это рельсовым путем, и поэтому вы бы сделали что-то вроде этого:

    curl -d 'entry[content]=I belong to AAA' -d entry[title]=AAA http://localhost:3000/entries'

В вашем контроллере

    Entry.create(params[:entry])

Это говорит о захвате данных "ввода" из хэша params (созданного рельсами для вас) и передать его как параметр Entry для инициализации нового объекта. "create" будет делать "новое" и "сохранять" для вас в одном вызове метода.

Ответ 2

Я проверил тест и получил ошибку MultiJson::DecodeError (743: unexpected token at '{'content':'I belong to AAA','title':'AAA'}'):

JSON требует двойных кавычек для ключей и строк, а не одинарных кавычек. Попробуйте --data '{"content":"I belong to AAA","title":"AAA"}'

Ответ 3

возьмите блок JSON

{\"a\":\"this_is_a\"}

и url закодировать его

%7B%22a%22%3A%22this_is_a%22

а затем используйте curl для публикации

curl -i --data "working_params=%7B%22a%22%3A%22this_is_a%22" http://url/accepts/json