Geokit-rails插件 – 无法在返回的GeoLoc对象上调用to_json,给出循环引用错误

我在rails 2.3应用程序上使用了早期版本的geokit插件,并且刚刚更新到这个最新版本 – 现在使用gem的版本。

在以前的版本中,可以将.geocode方法返回的对象转换为json。 只需在其上调用to_json方法即可。

然而,这在新版本中打破了。

我注意到在新的GeoLoc中有一个@all属性,如果你在它上面调用to_json就会产生循环引用错误。

以下是返回对象的示例:

<Geokit::GeoLoc:0x3837be4 @full_address="Phoenix, AZ, USA", @city="Phoenix", @provider="google", @country_code="US", @accuracy=4, @street_address=nil, @lng=-112.073821, @precision="city", @zip=nil, @success=true, @all=[#], @lat=33.448263, @state="AZ"> 

如果您在其上调用to_json,则会出现错误:

ActiveSupport :: JSON :: CircularReferenceError(对象引用本身)

我正在使用“json”通过jquery在地图上绘制标记。 当然,我可以从GeoLoc结果中创建自己的字符串并将其转换为json – 但它更多代码…

任何人都知道为什么在新版本中添加了该属性,以及是否有另一种方法可以将geoLoc结果直接转换为json?

嘿那里 – 现在最简单的方法是调用my_geoloc.to_hash.to_json

循环引用发生是因为地理编码调用可以返回多个结果,这些结果保存在@all属性中。