Rails嵌套属性与jQuery一起传递

时间:2016-04-26 15:00:42

标签: javascript jquery ruby-on-rails

我有以下定义:

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) },
      });

3 个答案:

答案 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如何处理和解析请求。