2016-02-12 83 views
0

如何使用geocoder宝石给出以下模型和关系来更新纬度和经度坐标。我有一个Location模型,latitudelongitude属性属于我的Event模型。经纬度自动获取并存储在我的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模型。

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

+0

是否塔LOC ation表包含'venue_address'属性? – Sravan

+0

什么是错误和你在哪里get.please精心制作 – Sravan

+0

@Sravan'位置'坐标获取'geocode_by'方法。要回答你的问题,'venue_address'在'Event'模型中。 –

回答

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 

希望的例子,可以帮助

相关问题