2013-05-23 3 views
1

Я использую activerecord-postgis-адаптер и squeel в гео ориентированном приложении. Получение данных с использованием различных запросов, основанных на поиске и где работает отлично и squeel, позволяет мне использовать функции PostgreSQL/PostGIS для запроса на основе пространственных функций и типов данных.INSERT и UPDATE в рубинах/рельсах с использованием функций PostgreSQL

Однако я не могу понять, как получить доступ к подобным функциям при выполнении 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-запросах, как и в случае запросов.

Я знаю, что я могу упасть обратно

ActiveRecord :: Base.connection.execute

, но предпочел бы избежать этого, если кто-то говорит мне, что это единственный путь.

-ra

+0

Для чего-то такого конкретного баз данных я бы пошел с 'ActiveRecord :: Base.connection.execute'. – fotanus

ответ

0

вы можете создать соединение с базой данных в модели вы работаете. один метод, который вы можете запустить это select_value метод, есть и другие:

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) 

следует запустить команду

просмотреть этот Даниэлем Адзума больше об этом один: http://blog.daniel-azuma.com/archives/216

вы, вероятно, может поместить этот тип кода при миграции. На самом деле это, вероятно, лучшая практика.

Смежные вопросы