假设我有以下表格,包括模型和嵌套模型:
<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
看起来模型正在变平,第一个模型的字段也会在范围之外重复。
如何在保持嵌套的同时发布模型,最好不要在散列中重复其范围之外的模型字段?
答案 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'))