Rails + Geocoder:未定义的方法`search'对于Geokit :: Geocoders :: Geocoder:Class

时间:2013-09-11 10:34:10

标签: ruby-on-rails ruby geolocation rails-geocoder

我正在使用Geocoder gem,我将此代码添加到用户模型

  include GeoKit::Geocoders

  geocoded_by :full_street_address   # can also be an IP address
  after_validation :geocode          # auto-fetch coordinates

并且在另一个控制器中,在 CarController #index 中我打电话:

zip_code = '94301'
aaa = Geocoder.search(zip_code).first.coordinates
puts '==='
puts aaa.inspect
puts '==='

但不是

s[0].latitude   # =>    37.4457966
s[0].longitude  # =>    -122.1575745
s[0].address    # =>    "Palo Alto, CA 94301, USA"

我得到了

undefined method `search' for Geokit::Geocoders::Geocoder:Class

设置Geocoder有什么不对?

1 个答案:

答案 0 :(得分:1)

我认为它只是一个命名空间问题。您需要删除include GeoKit::Geocoders。我查看了geocoder来源,找不到任何GeoKit

$ pwd
/usr/local/rvm/gems/ruby-2.0.0-p247/gems/geocoder-1.1.8/lib
$ find . | xargs grep -i GeoKit
$

所以我用Google搜索,显然还有另一个名为geokit的宝石。你提到的命名空间在line 92的这个gem中被解析了。而这个GeoCoder类显然没有搜索方法。所以我怀疑你在Gemfile中引用了geokit。

顺便说一句,我只使用地理编码器&它在我的环境中工作正常 -

$ rails console
Loading development environment (Rails 4.0.0)
2.0.0-p247 :001 > zip_code = '94301'
 => "94301"
2.0.0-p247 :002 > aaa = Geocoder.search(zip_code).first.coordinates
 => [37.4457966, -122.1575745]
2.0.0-p247 :003 >