#ruby-on-rails #ruby #activerecord #rails-3.1
#ruby-на-рельсах #ruby #activerecord #rails-3.1 #ruby-on-rails
Вопрос:
Я хотел бы изменить инструкцию по умолчанию, которую ActiveRecord использует для запроса таблицы модели. По умолчанию он запрашивает таблицу «кабели», например, с помощью …
this_cable = Cable.first
приводит к
SELECT "cables".* FROM "cables" LIMIT 1
Я хотел бы найти способ завершить это с
SELECT *,askml(wkb_geometry) as kml FROM "cables" LIMIT 1
Таким образом, я могу вызвать функцию базы данных и заставить ее вести себя как поле объекта.
this_cable.kml
=> "<LineString><coordinates>-73.976879999999994,40.674999999999997 -73.977029999999999,40.674779999999998 -73.977170000000001,40.674770000000002 -73.97775,40.67501</coordinates></LineString>"
Это может быть достигнуто путем добавления области
scope :with_kml, "*,askml(wkb_geometry) as kml"
Но я полагаю, что это немного запутанно. Я бы хотел, чтобы этот столбец «kml» всегда был там, без необходимости вызывать область «with_kml».
Есть идеи?
Ответ №1:
Вы пробовали использовать для этого default_scope или вы действительно хотите, чтобы это присутствовало во всех ваших моделях?
Что-то подобное может решить вашу проблему:
default_scope select("*, askml(wkb_geometry) as kml")
Однако, возможно, вы захотите изменить это на cables.*
, чтобы оно правильно работало с объединениями и тому подобным.