6

假设我有以下形式,包括一个模型和一个嵌套模型:

<label>Company Name</label>
<input type="text" ng-model="company.name" />

<label>Owner Name</label>
<input type="text" ng-model="company.owner.name" />

我这样发布:

Restangular.all('companies').post($scope.company);

我在服务器端(在本例中为 Rails)所期望的是一个嵌套哈希,如下所示:

company:
    name: Test Company
    owner:
        name: Test Owner

但我得到的是:

name: Test Company
company:
    name: Test Company
owner:
    name: Test Owner

似乎模型正在被展平,并且第一个模型中的字段也在范围之外重复。

如何在发布模型的同时保持其嵌套,并且最好不要在哈希范围之外重复模型字段?

4

2 回答 2

1

我是 Restangular 的创造者。

console.log能输出 $scope.company 的输出吗?

Restangular并没有讨好任何东西。它只是发送您作为参数提供的确切 JSon,这就是为什么您应该检查 $scope.company 的输出的原因。

之后,我们可以进一步检查。

另外,您是否检查了网络选项卡以获取请求的有效负载?可以吗?

于 2013-07-11T21:37:01.393 回答
0

我觉得有必要为其他发现这个问题的人澄清这一点。

传递传递不包含范围变量本身名称$scope.company的 JS 对象:company

{
    name: 'Test Company',
    owner: {
        name: 'Test Owner'
    }
}

服务器会将其视为一个名为 POST 的变量name,它是一个值为“Test Company”的字符串,另一个变量名为owner一个数组,其索引name的值为“Test Owner”

在 PHP 中是这样的:

$_POST['name']; // would = 'Test Company'
$_POST['owner']; // would = array('name'=>'Test Owner')

如果你希望它是服务器端的属性数组,company那么你需要将$scope.company一个名为“company”的属性封装在一个 JS 对象本身中:

$scope.company = {
     company: {
         name : 'Test Company',
         owner : {
             name : 'Test Owner'
         }
     }
};

现在在服务器端你会发现:

$_POST['company']; // would = array('name'=>'Test Company','owner'=>array('name'=>'Test Owner'))
于 2014-08-01T14:55:03.657 回答