通过街道地址使用地理编码器宝石地理编码更新经度/纬度

时间:2016-02-12 07:08:41

标签: ruby-on-rails ruby-on-rails-4 geolocation rubygems

如果给出以下模型和关系,我如何使用geocoder gem更新纬度和经度坐标。我有一个Location模型,其latitudelongitude属性属于我的Event模型。纬度和经度会自动获取并存储在latitude模型的longitudeLocation属性中。我的Event模型有一个字段venue_address,这是我的地理编码方式。

class Location < ActiveRecord::Base
  belongs_to :event
    geocoded_by :venue_address
    after_validation :geocode
end

这是我的Event模型与has_one :location关系

class Event < ActiveRecord::Base
    has_one     :location,  dependent: :destroy
end 

接下来是我的事件创建方法,我建立了这种关系。

class EventsController < ApplicationController
  def create
    @event = Event.new(event_params)
    # Builds longitude and latitude coordinates based on a valid street address
    # and saves it to Location table
    @event.build_location
...
  end 
end 

当我更新事件的地址时,我想对新坐标进行地理编码,并将坐标保存到Location模型中的相应字段。

我无法完成此操作。任何想法或建议?

1 个答案:

答案 0 :(得分:0)

尝试这样的事情

class Location < ActiveRecord::Base
  belongs_to :event
  geocoded_by :event_venue_address
  after_validation :geocode

  def event_venue_address
    event.venue_address
  end

end

或只是委托给事件模型

delegate :venue_address, to: event, prefix: true

以下是readme

的示例
If your model has street, city, state, and country attributes you might do something like this:

geocoded_by :address

def address
  [street, city, state, country].compact.join(', ')
end

希望有所帮助