使用Geocode Ruby Gem进行用户地址输入

时间:2012-05-01 01:36:24

标签: ruby-on-rails geocoding

我使用Geocode Ruby Gem将zip / country的用户输入转换为格式合理的位置(例如美国加利福尼亚州洛杉矶)。我也想在将来使用地理编码(以防万一你想知道我为什么要这么多格式化

我将列“地址”迁移到用户数据库中。现在我陷入了地理编码的困境,不知道是不是因为我没有在数据库中创建位置文件夹,而是使用用户数据库迁移列。

我收到路由错误:未定义的方法`geocoded_by'代表#

我是新手,所以如果我没有任何意义,我很抱歉。

class Location < ActiveRecord::Base
  attr_accessible :address, :latitude, :longitude

 geocoded_by :full_address
 after_validation :geocode, :if => :address_changed? 
end

这是我的控制器:

def full_address 
  @user = User.find(params[:address])
  Geocode.serach("@user")
end 

将我的location.rb更改为以下内容:

class Location < ActiveRecord::Base
extend ::Geocoder::Model::ActiveRecord 

  attr_accessible :address, :latitude, :longitude

  geocoded_by :address_for_geocode 
  reverse_geocoded_by :latitude, :longitude 
end

导致以下错误:

Routing Error

uninitialized constant Location::Geocoder

Try running rake routes for more information on available routes. 

2 个答案:

答案 0 :(得分:1)

很难在评论中提出建议,所以我会在答案中这样做,所以请原谅,如果它太长了。请不要投票,我会删除它或在最后编辑它。取决于它是否是真实答案。

您收到路由错误,因为您不了解要更改的内容以及代码中的内容。

第一

class Location < ActiveRecord::Base

  attr_accessible :address, :latitude, :longitude
  # comment this out! => Geocoder.search("New York, NY, USA")
end

在你的控制器方法中,只是尝试执行

def full_address 
  @user = User.find(params[:address])
  render :text => Geocoder.search("New York, NY, USA").inspect.to_s
end 

您将收到错误(如果您的应用中未加载gem)或某些结果。

在我们尝试其他任何事情之前,请先解决这个问题。

再次运行aaplication并为 full_address 控制器操作执行该路由

顺便说一下,你可以在rails console中试试所有内容

  

/ path / to / project#rails c

     

IRB&GT; Geocoder.search(“纽约,纽约,美国”)

==更新===

尝试在Loacation模型中包含地理编码器

class Location < ActiveRecord::Base
  extend ::Geocoder::Model::ActiveRecord

  geocoded_by :address_for_geocode
  reverse_geocoded_by :latitude, :longitude
end

我刚刚在他们的git存储库中检查了源代码,他们没有扩展ActivRecord :: Base所以你必须手动完成!!!

答案 1 :(得分:0)

请检查您的控制器

def full_address 
  @user = User.find(params[:address])
  Geocode.serach("@user")
end

应该是

def full_address 
  @user = User.find(params[:address])
  Geocode.search("@user")
end