如果给出以下模型和关系,我如何使用geocoder
gem更新纬度和经度坐标。我有一个Location
模型,其latitude
和longitude
属性属于我的Event
模型。纬度和经度会自动获取并存储在latitude
模型的longitude
和Location
属性中。我的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
模型中的相应字段。
我无法完成此操作。任何想法或建议?
答案 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
希望有所帮助