我有一个名为category_ids
的属性的产品对象,它是一个id数组。
我已经在我的资源工厂添加了$update
方法,因此我可以发送PUT请求。
当我PUT时,服务器接收如下数据:
id: 1,
description: 'Yada yada',
category_ids: [1,2,3],
product: { id: 1, description: 'Yada yada' } //<-- I need category_ids in here
如何将category_ids
数组放入product
节点?
更详细信息:
我只是使用角色资源进行更新:
'use strict'
angular.module('myApp').factory 'Product', ($resource) ->
resource = $resource '/api/v1/products/:id', { id: '@id' },
update:
method: 'PUT'
return resource
有趣的是,这个问题只发生在我的对象上调用实例方法。在工厂本身调用类方法有效:
currentProduct.$update()
&lt; - 这不能给我我想要的格式!
Product.update(id: currentProduct.id, product: currentProduct)
&lt; - 这样做: - \
答案 0 :(得分:1)
您可以向$ resource对象添加属性,例如
currentProduct.category_ids = [1,2,3];
现在这个属性成为PUT请求的请求参数。
假设您有$资源工厂名称“产品”,那么以下代码将适合您
var currentProduct = new Product()
// Bind properties to resource object
currentProduct.id = 1
currentProduct.description = 'Yada yada'
currentProduct.category_ids = [1,2,3]
// Initiate PUT request.
currentProduct.$update()
答案 1 :(得分:1)
我相信Rails期望让请求遵循模式
/产品/:ID
因此,当您想要更新产品时,您应该将其称为
product.$update({id:product.id});
这将向url发出请求
http://api/v1/products?id=1
请求有效负载,如
{"id":"1","description":"Yada yada","category_ids":[1,2,3]}
请在此处查看演示
答案 2 :(得分:0)
我们需要该$update
方法的代码,但我怀疑它依赖于this
关键字,这取决于您从>调用函数的对象
请你试试这件事,让我们知道它是否有效:
currentProduct.$update.bind(Product) ();
如果确实如此,这意味着确实$update
期望this
为Product
(事实并非如此,而在您的示例中为currentProduct
)。
答案 3 :(得分:0)
创建角度服务
// Angular Service
angular.module('myApp').factory('Product', function($resource,ENV)
return $resource(ENV.apiEndpoint+'/api/v1/products/:id', {}, {
update: { method: 'PUT' , params:{id:'@id'}}
});
});
在您的控制器中,您必须设置产品对象
angular.module('myApp').controller('ProductController',
function ($scope,Product) {
var requestParams = {
id: 1, //Service extracts this parameter to form the url
product: {
id: 1,
description: 'Yada yada'
category_ids: [1,2,3]
}
}
Product.update(requestParams,function(success){
console.log(success)
},function(error){
console.log(error)});
});