2014-09-25 5 views
0

Я использую почтальона, чтобы сделать пост запрос на мои рельсы/виноградный APIрубин JSON с Почтальон

Вот объект JSON

{ 
"customer":{ 
    "first_name":"Joe", 
    "last_name":"Doe", 
    "email":"[email protected]", 
    "phone":"999-999-9999", 
    "addresses_attributes":[{ 
     "address":{ 
      "address1":"123 somewhere st", 
      "customer_id":"", 
      "address2":"", 
      "city":"Moldor", 
      "state":"CA", 
      "zip":"99999", 
      "region_id":"1" 
     } 
    }] 
} 
} 

Если отправить это к API/v1 /customers.json я получаю следующее сообщение об ошибке

"error": "first_name is missing, last_name is missing, email is missing, phone is missing", 

Если изменить формат JSON для:

{ 
    "first_name":"Joe", 
    "last_name":"Doe", 
    "email":"[email protected]", 
    "phone":"999-999-9999", 
    "addresses_attributes":[{ 
     "address":{ 
      "address1":"123 somewhere st", 
      "customer_id":"", 
      "address2":"", 
      "city":"Moldor", 
      "state":"CA", 
      "zip":"99999", 
      "region_id":"1" 
     } 
    }] 
} 

Я действительно создает клиент, но он не создает по адресу

В моих моделей у меня есть

#customer.br 
has_many :addresses 
accepts_nested_attributes_for :addresses, allow_destroy: true 

#address.rb 
belongs_to :customer 

Вот апи/VI/curtomer.rb

desc "Create a Customer" 
params do 
    requires :first_name, type: String, desc: "First Name" 
    requires :last_name, type: String, desc: "Last Name" 
    requires :email, type: String, desc: "Email" 
    requires :phone, type: String, desc: "Phone" 
    optional :notes, type: String, desc: "Notes" 
end 
post do 


    # Tried with new instead of create 

    # test = Customer.new({ 
    #     first_name: params[:first_name], 
    #     last_name: params[:last_name], 
    #     email: params[:email], 
    #     phone: params[:phone], 
    #     notes: params[:notes], 
    #     addresses_attributes: params[:addresses] 
    #    }) 


    Customer.create({ 
        first_name: params[:first_name], 
        last_name: params[:last_name], 
        email: params[:email], 
        phone: params[:phone], 
        notes: params[:notes] 
        # addresses_attributes: params[:addresses] 
       }) 

end 

Адрес выглядит примерно так же, как и клиенты Я не использую контроллеры на виноград Документация

EDIT: добавить customer.rb создать код

ответ

1

Думайте ваши данные JSON должны быть:

{ "customer": 
    { 
    "first_name":"Joe", 
    "last_name":"Doe", 
    "email":"[email protected]", 
    "phone":"999-999-9999", 
    "addresses_attributes":[{  
     "address1":"123 somewhere st", 
     "customer_id":"", 
     "address2":"", 
     "city":"Moldor", 
     "state":"CA", 
     "zip":"99999", 
     "region_id":"1" 
    }] 
    } 
} 

См this example.

Если он не работает, покажите свой код контроллера.

+0

Я не использую контроллеры для документации Grape. Я добавил код создания в исходное сообщение. Спасибо за формат JSON – Marrento

+0

Поменяли мой ответ и думаю, что вы можете использовать 'Customer.create (params [: customer])' для создания нового клиента с ассоциацией. – dddd1919

Смежные вопросы