activerecord_postgis_adapter: nil:NilClass 的未定义方法“point”

activerecord_postgis_adapter: undefined method `point' for nil:NilClass

问题

90% 确定这是我的设置错误,但我做不到 self.factory 并且尝试访问 lonlat 时出现异常 "undefined method `point' for nil:NilClass"

我可以

设置 lonlat 使用:

mfactory = RGeo::ActiveRecord::SpatialFactoryStore.instance.factory(:geo_type => 'point')
self.lonlat = mfactory.point(long, lat)
self.save

这给了我像数据库中的 0101000020E610000061C3D32B65965DC03657CD7344F64040 这样的值。

我不能使用:

self.lonlat = "POINT(#{long},#{lat})"
self.save

问题

我需要在模型中设置一些特定的东西吗?

I created a github issue with a less consise but more detailed explaination.

RGeos 依赖于 GEOS。此错误是 RGeos 无法加载 GEOS 的结果。

检查这是否是问题所在:

$ rails c
> RGeo::Geos.supported?
=> false

检查您是否安装了 GEOS:

geos-config --version

如果未安装 GEOS:

brew install geos

如果安装了 GEOS,请修复已安装的 RGeo:

$ geos-config --prefix
/usr/local/Cellar/geos/3.5.0
$ gem install rgeo -- --with-geos-dir=/usr/local/Cellar/geos/3.5.0

现在应该已正确安装并且您的错误已得到修复。您可以像我们上面那样检查:

$ rails c
> RGeo::Geos.supported?
=> true

如果这不起作用,请卸载所有版本的 geos 和 rgeo:

$ brew uninstall geos
$ gem uninstall rgeo

按照上面的说明重新安装 geos 和 rgeo。您的 Gemfile 中应该有 gem 'rgeo' 并且在捆绑后,您应该将其视为输出之一:"Installing rgeo 0.4.0 with native extensions"