Область параметров Angularjs $resource для HTTP Hash

По умолчанию метод Angular $resource.$save отправляет запрос с параметрами в «базовой» области. Например, создание ресурса со свойствами {name: 'John Smith', email: '[email protected]'} приведет к POST с параметрами:

name=John Smith&[email protected]. 

Однако у меня есть контроллер Rails, которому требуется ресурс, привязанный к вложенному хэшу (больше похоже на обычный рельсовый способ ведения дел). Я бы хотел, чтобы тот же запрос на создание имел параметры:

user[name]=John Smith&user[email][email protected]

Проблема в том, что я просто не вижу способа сделать это с помощью $resource. Является ли это возможным?


person Graham Kaemmer    schedule 31.10.2014    source источник


Ответы (1)


Этого можно добиться с помощью опции transformRequest $resource. Ниже приведен пример использования действия update (написанного на coffeescript):

update:
  method: 'PUT'
  transformRequest: (data, headersGetter) ->
    data = _.omit(data, '$promise', '$resolved')
    json = {'user': data}
    return JSON.stringify(json)

Если вы хотите сделать это по умолчанию, я рекомендую написать сервис, который обертывает $resource и добавляет функции transformRequest ко всем действиям.

person Paul Fletcher-Hill    schedule 20.02.2015