Rails Geocoder“未定义的方法错误”

这是Ruby上的另一个真正的新手,所以请温柔……我正在使用alexreisner的Geocoder on rails 3.0,我无法调用Geocoder :: Results lib中的方法。 我仔细阅读了Geocoder文档,但我无法完成一件简单的事情:从用户提交的地址中取出“状态”结果。 因此,将“加利福尼亚州旧金山的123 Fake Street”变成“CA”或“California”。

(我的程序目前只会使用“状态”信息来帮助确定结果,但我希望在以后更改应用程序时使用完整的地址信息,这就是我要求提供完整地址的原因。 )

我已经通过我从这里找到的文档和其他答案中收集到的最好的东西建立了我的模型,但是之前的答案与此主题相似并没有帮助我:

class Project < ActiveRecord::Base attr_accessible :title, :address, :latitude, :longitude belongs_to :user geocoded_by :address after_validation :fetch_coordinates reverse_geocoded_by :latitude, :longitude do |obj, geo| obj.state = geo.state obj.country_code = geo.country_code obj.address = [geo.state, geo.country_code].join(",") end after_validation :reverse_geocode end 

但这会为状态,国家代码和地址提供“未定义的错误方法”。 我不明白,因为Geocoder gem的文档清楚地提供了这些方法。 我的模型似乎根本无法访问它们。 (为了记录,我的模型能够从输入的地址中提取纬度和经度,所以看起来Geocoder配置正确。而且“geocoded_by”方法效果很好。此外,它已正确设置为Google API)。

我很确定我在这里缺少一些直截了当的东西。 在rails控制台中,我甚至可以使用Geocoder.search(“Miami,FL”)并提取所有县,州和城市信息,但我似乎无法通过我的模型提取“状态”。

谢谢你的帮助!

如果您查看Geocoder站点上的示例,您将看到产生块的第二个值似乎是数组或其他forms的集合,因此您无法直接调用其上的方法。 相反,你首先必须从中取出正确的物体:

 reverse_geocoded_by :lat, :lon do |obj,results| if geo = results.first obj.city = geo.city obj.zipcode = geo.postal_code obj.country = geo.country_code end end 

确保重新启动rails服务器。 我遇到了一种情况,地理编码在rails控制台中运行良好,但在我的应用程序中给了我一个undefined method 'geocoded_by' 。 似乎这不是你得到同样错误的原因,但它是我的。