Отсутствуют атрибуты (виноградный API)

Я новичок в Rails. Я попытался написать небольшое приложение API Rails, используя gem grape.

Я следовал этому руководству http://www.sitepoint.com/build-great-apis-grape/

Но когда я попытался создать новую запись, у меня была ошибка: {"error":"type_id is missing"}

Вот мой код:

singers.rb

module V1
 class Singers < Grape::API
  resource :singers do
    desc "List all singers"
    get do
      Singer.all
    end

    desc "Create a new singer"
    params do
      requires :name, type: String
      requires :type_id, type: Integer
    end

    post do
      Singer.create!({
       name: params[:name],
       type_id: params[:type_id]
      })
    end
  end
 end
end

И когда я набираю в консоли как: curl http://localhost:3000/api/v1/singers.json -d "name=khanhpn;type_id=1"

У меня была ошибка: {"error":"type_id is missing"}

Я не понял, почему выдает ошибку. Надеюсь, каждый сможет объяснить мне. Большое спасибо.

Это мой код, который я вставил в битбакет: " rel="nofollow">https://bitbucket.org/baran19901990/grape_api/src/b8a0d676f17de3fedc95cc7efff60fab5afb0fc1/app/api/v1/singers.rb?at=master&fileviewer=file-view-default

Решения:

curl -X POST http://localhost:3000/api/v1/singers -d "name=khanhpn&type_id=1"


person Khanh Pham    schedule 07.10.2015    source источник


Ответы (2)


Проблема заключается в передаче ваших параметров в curl. Вы должны разделить их на &, а не на ; curl http://localhost:3000/api/v1/singers.json -d "name=khanhpn&type_id=1"

person Brozorec    schedule 07.10.2015

Я думаю, что проблема не в коде, а в вызове curl...

Попробуйте что-то вроде:

curl -F name=khanhpn \
-F type_id=1 \
-X POST http://localhost:3000/api/v1/singers

Если вы хотите использовать опцию -d или использовать однострочную команду, это будет что-то вроде:

curl -d "name=khanhpn" -d "type_id=1" -X POST http://localhost:3000/api/v1/singers
person fleveque    schedule 07.10.2015
comment
Я думаю, нам не нужно было добавлять POST в curl. И мы можем переписать так: curl -X POST http://localhost:3000/api/v1/singers -d "name=khanhpn&type_id=1" Я думаю, что это было короче. Но спасибо за ваш ответ. - person Khanh Pham; 07.10.2015