Изменить инструкцию выбора finder по умолчанию в Rails 3.1

#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.* , чтобы оно правильно работало с объединениями и тому подобным.