2016-08-03 95 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