Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActiveRecord将字段设置为SQL表达式_Ruby On Rails_Ruby_Activerecord_Spatialite - Fatal编程技术网

Ruby on rails ActiveRecord将字段设置为SQL表达式

Ruby on rails ActiveRecord将字段设置为SQL表达式,ruby-on-rails,ruby,activerecord,spatialite,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: # INSE

我使用的是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所使用的格式


谢谢

我还没有使用GeoRuby,但对于空间数据,我使用了带有@geodist函数的sphinx,使用这个工具非常好

您可以阅读一些资源:


经过几天的搜索,没有找到解决方案,我决定简单地利用原始连接来执行实际插入:

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

嗨,迈克,谢谢你的迅速回复!虽然认为Sphinx非常适合搜索,但我尝试在这里以非常特定的格式插入数据。据我所知,认为斯芬克斯没有做到这一点,是吗?你说你用纬度和经度保存位置信息-斯芬克斯也有这些字段,但据我所知,不支持查询乔治比点对象。我确实有一组纬度和经度,但是我需要把它们转换成众所周知的二进制格式。我更新了我的问题,希望它现在更清楚我想要实现什么。对于MySQL或PostgreSQL,有一个spatial_adapter gem(),但我同样没有看到任何用于SQLite的等价工具。注意:SQLite不适合生产,因此,我建议切换到带有PostGIS扩展的PostgreSQL。@MarnenLaibow Koser不幸的是,我目前没有这种奢侈。我现在需要用SQLite来运行它,这不是一种奢侈。如果您没有时间安装真正的多用户数据库,那么您就没有时间开发它。很抱歉说得太苛刻了,但事实就是这样。@MarnenLaibow Koser这不是安装另一个数据库的问题,而是让许多其他明确依赖SQLite的软件保持工作状态的问题。无论这在过去是否是一个实际的决定,这些都是我现在必须处理的约束。SQLite由于缺乏并发支持,不适合用于生产Web应用程序。如果您的生产Web应用程序依赖它,那么这将是一场等待发生的灾难。