邮政上的重叠扁平模型?

时间:2013-07-11 14:00:27

标签: angularjs restangular

假设我有以下表格,包括模型和嵌套模型:

<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

看起来模型正在变平,第一个模型的字段也会在范围之外重复。

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

2 个答案:

答案 0 :(得分:1)

我是Restangular的创造者。

你可以console.log $ scope.company的输出吗?

Restangular不会讨人喜欢。它只是发送您作为参数提供的确切JSon,这就是为什么你应该检查$ scope.company的输出。

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

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

答案 1 :(得分:0)

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

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

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

服务器将此视为名为name的POST变量,该变量是值为“Test Company”的字符串,另一个名为owner的变量是一个名为name的索引的数组具有'测试所有者'的价值

在PHP中就是这样:

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

如果您希望它是服务器端的属性数组(称为company),那么您需要将$scope.company封装在JS对象本身中,并使用标题为“company”的属性:

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

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

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