我使用Geocoder获取地址的纬度和经度。这是模特:
class Location < ActiveRecord::Base
has_many :offers
# Validation
validates :name, :address, :postcode, :presence => true
# Geocoding
geocoded_by :full_address
after_validation :geocode
# Methods
def full_address
[address, "London", postcode].compact.join(', ')
end
end
如果没有纬度和经度,记录就没用了,所以除非地理编码成功,否则我需要阻止它保存。
我尝试为地址添加一些验证,但地址可以有效而不是可地理编码(例如伦敦123 Fake Street)。我还尝试添加纬度和经度的验证,但因为地理编码发生在验证之后也没有。
澄清一点:我理想地希望保持地理编码after_validation,以便我不必为不相关的错误调用地理编码。例如,模型上的name
属性是必需的,如果空白则尝试进行地理编码是没有意义的。