1

我在面向地理的应用程序中使用 activerecord-postgis-adapter 和 squeel。使用基于 find 和 where 工作正常和 squeel 的各种查询获取数据允许我使用 PostgreSQL/PostGIS 函数基于空间函数和数据类型进行查询。

但是,我不知道在执行 INSERT 和 UPDATE 时如何访问类似的功能。假设我想做以下事情:

UPDATE object SET raster = ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150, '2BUI') 
where id = 12345;

我怎么能执行这样的查询?Squeel 似乎甚至不支持 SELECT 以外的其他查询。

在一个完美的世界中,我什至希望 Rgeo 的数据类型在用于 UPDATE 查询时自动转换,就像 where 查询一样。

我知道我可以退回到

ActiveRecord::Base.connection.execute

,但宁愿避免这种情况,除非有人告诉我这是唯一的方法。

-ra

4

1 回答 1

0

you could create a connection to the database per model you're working with. one method you can run is the select_value method, there are others:

sql = "UPDATE object SET raster = ST_AsRaster(ST_Buffer(ST_Point(1,5),10),150, 150, '2BUI') where id = 12345;"
conn = ModelName.connection
conn.select_value(sql)

should run your command

see this post by Daniel Azuma for more about this one: http://blog.daniel-azuma.com/archives/216

you could conceivably put this type of code in migrations. In fact its probably a best practice.

于 2013-09-24T04:59:35.473 回答