2014-10-30 5 views
3

У меня возникли проблемы с жемчужиной винограда и проверкой параметров. Идея заключается в создании сложного объекта с использованием вложенных атрибутов через службу API.Как передать метод Hash to Grape API?

У меня есть способ создать поездку, поездка имеет много направлений, и я хочу передать это направление, используя хэш (с помощью помощника accepts_nested_attributes_for).

У меня есть это ограничение виноградного над параметром:

requires :destinations, type: Hash 

И я пытаюсь отправить что-то вроде этого:

{ destinations => [ 
    { destination: { name => 'dest1'} }, 
    { destination: { name => 'dest2'} }, 
    { destination: { name => 'dest3'} } 
]} 

Для того, чтобы построить что-то вроде ниже структур внутри методы и получите сообщение об ошибке:

{ trip: { 
    name: 'Trip1', destinations_attributes: [ 
    { name: 'dest1' }, 
    { name: 'dest2' }, 
    { name: 'dest3' } 
    ] 
}} 

Я использую расширение chrome для POSTMAN для вызова t он API.

Вот захват экрана: enter image description here

Если кто-то может помочь мне, я был бы очень благодарен.

+0

Во время редактирования сообщения я обнаружил, что вы пропустили одну фигурную скобку (после пункта назначения3), что делает ваш хэш недопустимой структурой. Это было причиной? – mudasobwa

ответ

3

Взглядами то, что вы пытаетесь отправить, вам нужно изменить ограничение Виноградная, потому что destinations является Array, не Hash:

requires :destinations, type: Array 

Вам не нужно «назначения» хэш при отправке запроса:

{ destinations => [ 
    { name => 'dest1', other_attribute: 'value', etc... }, 
    { name => 'dest2', other_attribute: 'value', etc... }, 
    { name => 'dest3', other_attribute: 'value', etc... } 
]} 

Это создает массив хешей.

Для того, чтобы отправить это через POSTMAN, вам необходимо изменить параметр destinations на отправку и добавить несколько строк в POSTMAN. Что-то вроде:

destinations[][name]    'dest1' 
destinations[][other_attribute]  'value1' 
destinations[][name]    'dest2' 
destinations[][other_attribute]  'value2' 
destinations[][name]    'dest3' 
destinations[][other_attribute]  'value3' 

Надеюсь, это ответит на ваши вопросы. Дайте мне знать, если это то, что вы искали.

+0

Спасибо, человек, который работает. – halbano