使用 Geocoder Gem 验证 Longitude/Latitude
Validating Longitude/Latitude with Geocoder Gem
我在 rails 中使用地理编码器 gem 从地址生成 latitudes/longitudes。我已经根据以下堆栈溢出问题实施了验证:
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 不会更新 longitude/latitude 字段。因此,即使地址无效,longitude/latitudes 仍然有效。
我是 rails 的新手,并试图找到一种方法在 运行 地理编码器之前将 longitude/latitude 字段设置为 nil,但找不到有效的方法。例如,我尝试将以下内容添加到我的编辑表单中:
<%= f.hidden_field :longitude, value: nil %>
<%= f.hidden_field :longitude, value: nil %>
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
我在 rails 中使用地理编码器 gem 从地址生成 latitudes/longitudes。我已经根据以下堆栈溢出问题实施了验证:
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 不会更新 longitude/latitude 字段。因此,即使地址无效,longitude/latitudes 仍然有效。
我是 rails 的新手,并试图找到一种方法在 运行 地理编码器之前将 longitude/latitude 字段设置为 nil,但找不到有效的方法。例如,我尝试将以下内容添加到我的编辑表单中:
<%= f.hidden_field :longitude, value: nil %>
<%= f.hidden_field :longitude, value: nil %>
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