2016-08-03 52 views
0

我有一個booking_pickup和location_dropoff的預訂模型,我想使用地理編碼器功能。我已經在模型中聲明瞭geocoder映射(下面),但不知何故,只有最後一個聲明(location_pickup)在數據庫中得到更新。任何具體的我在這裏做錯了?導軌地址解析器中的多個地址問題

class Booking < ActiveRecord::Base 
belongs_to :user 

geocoded_by :location_dropoff, :latitude => :location_dropoff_latitude, :longitude => :location_dropoff_longitude 

geocoded_by :location_pickup, :latitude => :location_pickup_latitude, :longitude => :location_pickup_longitude 

after_validation :geocode, if: :location_dropoff_changed? 
after_validation :geocode, if: :location_pickup_changed? 

validates :location_pickup, presence: true 
validates :location_dropoff, presence: true 
end 

試圖定義兩種方法洛倫佐的建議,但它仍然無法正常工作

class Booking < ActiveRecord::Base 
    before_validation :geocode_location_dropoff 
    before_validation :geocode_location_pickup 
    belongs_to :user 
    def geocode_location_dropoff 
     geocoded_by :location_dropoff, 
      latitude: :location_dropoff_latitude, 
      longitude: :location_dropoff_longitude 
     end 
     def geocode_location_pickup 
     geocoded_by :location_pickup, 
      latitude: :location_pickup_latitude, 
      longitude: :location_pickup_longitude 
     end 

     after_validation :geocode, if: :location_dropoff_changed? 
     after_validation :geocode, if: :location_pickup_changed? 

     validates :location_pickup, presence: true 
     validates :location_dropoff, presence: true 
    end 

回答

1

當調用geocoded_by重新定義的方法geocoded_by模型中的第二次。你在做什麼等於幾乎如下:

a = 1 
a = 2 

而且你可以想象如果你打電話給'a'它只會有值'2'。如果您希望模型對多個「事物」進行地理編碼,我建議您創建兩個不同的類(一個稱爲LocationDropoff和另一個LocationPickup),以便您可以獨立地對其進行地理編碼並使其屬於Booking類。否則,你應該定義你自己的方法來獨立地定位不同的屬性,你可以使用回調。

+0

謝謝!如何定義我自己的方法和獨立地理定位。我創建了兩種不同的方法,並試圖在之前驗證它們。它沒有工作,雖然(增加了疲倦的代碼問題) – Mayank