【问题标题】:Update longitude / latitude with geocoder gem geocode by street address使用 geocoder gem geocode 按街道地址更新经度/纬度
【发布时间】:2016-02-12 07:08:40
【问题描述】:

在给定以下模型和关系的情况下,如何使用 geocoder gem 更新纬度和经度坐标。我有一个Location 模型,它具有属于我的Event 模型的latitudelongitude 属性。纬度和经度会自动获取并存储在我的Location 模型的latitudelongitude 属性中。我的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 模型中的相应字段。

我无法做到这一点。有什么想法或建议吗?

【问题讨论】:

  • 位置表是否包含“venue_address”属性?
  • 什么是错误以及你得到了什么。请详细说明
  • @Sravan Location 坐标通过geocode_by 方法获取。要回答您的问题,venue_address 位于 Event 模型中。
  • 如果'venue_address'在事件模型中,那么'geocoded_by :venue_address'应该在事件模型中。

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


【解决方案1】:

试试这样的

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

希望有帮助

【讨论】:

    猜你喜欢
    • 2015-12-06
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多