ActiveRecord устанавливает поле в выражение SQL - PullRequest
3 голосов
/ 11 ноября 2011

Я использую 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-объекты, он не может сохранитьих в том же формате, что и SpatiaLite.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 ноября 2011

После нескольких дней поиска и поиска решения, я решил просто использовать необработанное соединение для фактической вставки:

rc = ActiveRecord::Base.connection.raw_connection
rc.execute("INSERT INTO objects (geometry)
            VALUES (MakePoint(#{obj.lng}, #{obj.lat}))")
0 голосов
/ 11 ноября 2011

Я еще не использовал GeoRuby, но для пространственных данных я использовал think-sphinx с функцией @geodist, и довольно удобно использовать инструмент.

Некоторые ресурсы, о которых вы можете прочитать:

...