2016-03-14 34 views
0

我使用的地理編碼寶石軌生成地址緯度/經度。我實現了基於以下堆棧溢出問題的驗證:驗證/緯度與地理編碼寶石

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 

我的問題是,當用戶編輯自己的有效地址的地址無效地址解析器寶石不會更新經度/緯度字段。因此,即使地址不是,經度/緯度仍然有效。

我新的軌道,並試圖找到一種方式運行地理編碼之前設置經度/緯度字段爲零,但無法找到工作的方法。例如,我嘗試在我的編輯表單中添加以下內容:

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

回答

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 
+0

謝謝,這完美! –