【问题标题】:Rails GPS coordinates as an array from a form inputRails GPS 坐标作为来自表单输入的数组
【发布时间】:2016-05-01 18:27:56
【问题描述】:

我在我的应用程序中设置了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[:my_object][:coordinates] # => ["[x, y]"]
# Wanted: [x, y]

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

此外,此输入需要清理,数字转换为浮点数,任何指南,关于如何“整齐”地做到这一点的提示?

【问题讨论】:

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


    【解决方案1】:

    您需要添加 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]
    

    【讨论】:

    • 有一个剩余的脚本。更新了我的答案。我很想知道为什么答案被否决了……
    • 好吧,这不是我。我正在尝试您的解决方案,稍后会报告。
    • @CyrilDuchon-Doris,没关系。我只是把它放在那里给反对的选民。不是你的意思,对不起。想知道我是否犯了一些错误并且没有意识到。
    • 不用担心。刚刚试了一下,效果很好,谢谢。由于两个 hidden_​​fields,HTML 中有一个重复的 ID,但我想没有办法解决它?
    • 你可以强制 Rails 使用你的ids,通过将它们指定为参数,就像class。我会更新我的答案。
    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 2017-12-10
    • 1970-01-01
    • 2021-08-02
    • 1970-01-01
    • 2012-09-02
    • 2013-12-09
    • 2020-03-06
    相关资源
    最近更新 更多