ActiveRecord将字段设置为SQL表达式

时间:2011-11-11 07:46:03

标签: ruby-on-rails ruby activerecord spatialite

我使用的是Ruby 1.8.7和Rails 2.3.8,并且有许多以纬度和经度表示的位置。我使用SQLite SpatiaLite扩展将坐标转换为众所周知的二进制(WKB)格式。我关心的是如何让ActiveRecord执行插入或更新,调用适当的SpatiaLite转换方法。我希望做这样的事情:

obj.geometry = "AsBinary(MakePoint(4, 51))"
obj.save
# ActiveRecord would now do something like:
# INSERT INTO objects (geometry) VALUES (AsBinary(MakePoint(4, 51)))

ActiveRecord可以实现吗?

我已经尝试过GeoRuby但是虽然它能够正确读取WKB blob,但它无法将它们保存为SpatiaLite的相同格式。

谢谢!

2 个答案:

答案 0 :(得分:0)

我还没有使用GeoRuby,但是对于空间数据,我使用了思维-sphinx和@geodist函数,并且使用工具非常好。

您可以阅读的一些资源:

答案 1 :(得分:0)

经过几天的搜索并找不到解决方案后,我决定只使用原始连接来执行实际插入:

rc = ActiveRecord::Base.connection.raw_connection
rc.execute("INSERT INTO objects (geometry)
            VALUES (MakePoint(#{obj.lng}, #{obj.lat}))")