Измените оператор поиска по умолчанию в Rails 3.1 - PullRequest
1 голос
/ 08 ноября 2011

Я бы хотел изменить оператор по умолчанию, который 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 Ответ

2 голосов
/ 08 ноября 2011

Вы пытались использовать default_scope для этого или действительно хотите, чтобы это присутствовало на всех ваших моделях?

Что-то подобное может решить вашу проблему:

default_scope select("*, askml(wkb_geometry) as kml")

Возможно, вы захотите изменить это значение на cables.*, чтобы оно правильно работало с соединениями и тому подобным.

...