0

我使用 Geocode Ruby Gem 将用户输入的 zip/country 转换为格式良好的位置(例如,美国加利福尼亚州洛杉矶)。我还想在未来使用地理编码(以防你想知道为什么我要费这么多麻烦来修饰格式

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

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

我对这一切都很陌生,所以如果我没有任何意义,我很抱歉。

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. 
4

2 回答 2

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 控制台中尝试所有操作

/path/to/project#rails c

irb> Geocoder.search("New York, NY, USA")

== 更新 ===

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

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

  geocoded_by :address_for_geocode
  reverse_geocoded_by :latitude, :longitude
end

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

于 2012-05-01T21:13:41.820 回答
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 
于 2014-12-18T07:23:36.483 回答