ActiveRecord set field to SQL expression
-
26-02-2021 - |
Frage
I am using Ruby 1.8.7 and Rails 2.3.8 and have a number of locations represented by a latitude and a longitude. I am using the SQLite SpatiaLite extension to convert the coordinates to the well-known binary (WKB) format. My concern is how to have ActiveRecord perform the insert or update, calling the appropriate SpatiaLite conversion methods. I am looking to do something like this:
obj.geometry = "AsBinary(MakePoint(4, 51))"
obj.save
# ActiveRecord would now do something like:
# INSERT INTO objects (geometry) VALUES (AsBinary(MakePoint(4, 51)))
Is this possible with ActiveRecord?
I have already tried GeoRuby but while its able to properly read WKB blobs, it is unable to save them to the same format SpatiaLite does.
Thanks!
Lösung 2
After days of searching and coming up with no solution, I decided to simply leverage the raw connection to perform the actual insert:
rc = ActiveRecord::Base.connection.raw_connection
rc.execute("INSERT INTO objects (geometry)
VALUES (MakePoint(#{obj.lng}, #{obj.lat}))")
Andere Tipps
I didn't use GeoRuby yet, but for spatial data I used thinking-sphinx with @geodist function, and it's quite nice to use tool.
Some resources you can read about it: