2015-10-07 6 views
0

Я новичок в Rails. Я попытался написать небольшое приложение API Rails, используя gem grape.Атрибуты отсутствуют (API-интерфейс винограда)

Я последовал за этот учебник 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"}

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

Это мой код, который я толкнул на BitBucket: https://bitbucket.org/baran19901990/grape_api/src/b8a0d676f17de3fedc95cc7efff60fab5afb0fc1/app/api/v1/singers.rb?at=master&fileviewer=file-view-default

Solutions:

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

ответ

2

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

+0

Спасибо за ваш ответ. Он работал хорошо. –

3

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

Попробуйте что-нибудь наподобие:

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 
+0

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