Данные 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