【问题标题】:Validating Longitude/Latitude with Geocoder Gem使用 Geocoder Gem 验证经度/纬度
【发布时间】:2016-03-14 03:10:45
【问题描述】:

我正在使用 Rails 中的 Geocoder gem 从地址生成纬度/经度。我已经根据以下堆栈溢出问题实现了验证:

Validating with Geocoder Gem

型号

  class Location < ActiveRecord::Base
  attr_accessible :address1, 
                  :country, 
                  :latitude, 
                  :longitude, 
                  :name

  validates :latitude, :presence => {message: "Not a valid location on Google Maps, please check name address & country fields" }

  geocoded_by :address
  after_validation :geocode, :if => :address_changed?

  def address
  [name, address1, country].compact.join(' ')
    end

    def address_changed?
  attrs = %w(name address1 country)
  attrs.any?{|a| send "#{a}_changed?"}
    end
end

我的问题是,当用户将其有效地址编辑为无效地址时,地理编码器 gem 不会更新经度/纬度字段。因此,即使地址无效,经度/纬度仍然有效。

我是 rails 新手,并试图在运行地理编码器之前找到一种将经度/纬度字段设置为 nil 的方法,但找不到有效的方法。例如,我尝试将以下内容添加到我的编辑表单中:

<%= f.hidden_field :longitude, value: nil %>
<%= f.hidden_field :longitude, value: nil %>

【问题讨论】:

    标签: ruby-on-rails ruby validation geocoding


    【解决方案1】:

    Active Record 提供before_validation callback

    before_validation :set_coords_to_nil, :if => :address_changed?
    
    private
    
    def set_coords_to_nil
        self.latitude = nil
        self.longitude = nil
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多