Rails GPS坐标作为表格输入的数组

时间:2016-05-01 18:27:57

标签: ruby-on-rails arrays forms gps actioncontroller

我在我的应用程序中设置了gmaps-autocomplete-rails gem,我有一个UI回调,可以让我将GPS坐标设置为输入

function autocompleteMap(){
        var completer;
        completer = new GmapsCompleter({
            ...
            updateUI: function(address, latLng) {
                $("#myObject_coordinates").val(
                  "["+latLng.lat()+", "+latLng.lng()+"]" 
                )
            }
        });
    }

我的mongoid模型接受坐标作为与地理编码器gem一起使用的数组。有没有一种实用的方法可以通过输入字段将lat / lng作为数组传递?一些SO答案建议使用

f.text_field(:coordinates, multiple: true)

但我无法弄清楚我应该如何填充值,以便将其解释为控制器中的数组(并保留lat / Lng顺序)

Get an array from a rails表单在我的情况下没有帮助,因为我使用javascript来填充单个输入(或者我应该将其设置为填充两个输入?)

现在使用上面的js函数,相关的rails params变为

params[:my_object][:coordinates] # => ["[x, y]"]
# Wanted: [x, y]

我是否必须手动将字符串解析为数组,还是有技巧?

此外,这个输入需要消毒,数字转换为浮动,任何指南,如何做到这一点"整洁" ?

1 个答案:

答案 0 :(得分:0)

您需要添加2个字段,并且您可能希望隐藏它们。

视图

f.hidden_field(:coordinates, multiple: true, class: 'lat', id: 'lat')
f.hidden_field(:coordinates, multiple: true, class: 'lng', id: 'lng')

的JavaScript

// ...
    updateUI: function(address, latLng) {
      $('input.lat').val(latLng.lat());
      $('input.lng').val(latLng.lng());
    }
// ...

控制器

# Will receive it as an array
params[:my_object][:coordinates]               # => [x, y]