Я добавляю AngularJS 1.x в форму для редактирования заказов (возможность изменить дату, доставку и адрес в этом примере). У меня есть Рубин на Rails JSON API с несколькими конечными точками:AngularJS Как преобразовать запросы для Rails API
GET /addresses
[{ id: 1, line1: "...", line2: "...", zip: "..." }, ...]
GET /shippings
[{ id: 1, name: "priority" }, ...]
GET /orders/:id
{ date: "...",
shipping: { id: 1, name: "priority" },
address: { id: 1, line1: "...", line2: "...", zip: "..." } }
PATCH /orders/:id
{ date: "...",
shipping_id: 1,
address_attributes: { line1: "...", line2: "...", zip: "..." } }
Внутри моей OrdersController
я имею следующее:
var app = angular.module('app');
app.controller('OrdersController', ['$scope', 'Order', 'Address', 'Shipping',
function($scope, Order, Address, Shipping) {
$scope.order = Order.get({ id: 123 });
$scope.addresses = Address.query();
$scope.shippings = Shipping.query();
$scope.save = function() {
$scope.order.$save(function() {
// ...
}, function(error) { alert(error); });
};
}
]);
Моя форма довольно проста:
<form ng-submit="save()">
<input type="date" ng-model="order.date" />
<select ng-model="order.shipping"
ng-options="option.name for option in shippings track by option.id">
</select>
<input type="text" ng-model="order.address.line1" />
<input type="text" ng-model="order.address.line2" />
<input type="text" ng-model="order.address.zip" />
<input type="submit" value="Save"/>
</form>
спасбросков функция попадает в мою конечную точку API, однако параметры неверны. Мне нужно найти способ преобразования между этими форматами:
{ date: "...", shipping: { ... }, address: { ... } }
{ date: "...", shipping_id: 1, address_attributes: { ... } }
Каков рекомендуемый способ сделать это в AngularJS? Это что-то, что нужно сделать через перехватчики? Должен ли я создавать новый ресурс Order
и копировать атрибуты в желаемом порядке?
Возможный дубликат http://stackoverflow.com/a/35037641/630544 :-) –