我有以下定义:
params.require(:sets).permit(:name, zones_attributes: [:latitude, :longitude])
我想用jQuery用ajax发送它们,我认为我构建错误是因为我一直收到这个错误:
未经许可的参数:0,1
这就是我发送的内容:
{
"sets"=>{
"name"=>"America",
"zones_attributes"=>{
"0"=>[
"49.95121990866204",
"-117.861328125"
],
"1"=>[
"-33.578014746143985",
"-55.986328125"
]
}
},
"action"=>"create",
"controller"=>"sets"
}
我认为问题是在纬度/经度值之前添加的“关键”值。 这就是我添加这些值的方式:
this.zones.push([marker.position.lat(), marker.position.lng()]);
有没有办法在没有钥匙的情况下添加它们?还是我走错了路?
更新
ajax代码:
$.ajax({
type: "POST",
url: '/zone_sets',
data: { zone_sets: { name: map.markerListName ,zones_attributes: map.zones } },
success: function (data) { $("input[name=zone_set]").append(data) },
});
答案 0 :(得分:0)
你应该像这样添加它们:
this.zones.push({'latitude': marker.position.lat(), 'longitude': marker.position.lng()});
答案 1 :(得分:0)
是的,“钥匙”看起来就是问题所在。
params.require(:sets).permit(:name, zones_attributes: [:latitude, :longitude])
希望您的请求采用以下格式:
{
"sets"=>{
"name"=>"America",
"zones_attributes"=>[
{
"latitude": "49.95121990866204",
"longitude": "-117.861328125"
},
{
"latitude": "-33.578014746143985",
"longitude": "-55.986328125"
}
]
},
"action"=>"create",
"controller"=>"sets"
}
即。错误所指的“0”和“1”就像数组索引一样。
答案 2 :(得分:0)
将您当前的ajax
代码更改为:
$.ajax({
type: "POST",
dataType: 'json',
headers: {
'Content-Type': 'application/json'
},
url: '/zone_sets',
data: JSON.stringify({ zone_sets: { name: map.markerListName ,zones_attributes: map.zones } }),
success: function (data) { $("input[name=zone_set]").append(data) },
});
正如您所看到的,实际问题是Rails如何处理和解析请求。