在Rails 3.1中更改默认的finder select语句

时间:2011-11-08 14:45:21

标签: ruby-on-rails ruby activerecord rails-3.1

我想更改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 个答案:

答案 0 :(得分:2)

您是否尝试过使用default_scope,或者您是否真的想让它出现在您的所有型号上?

这样的事情可能会解决您的问题:

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

您可能希望将其更改为cables.*,以使其能够正常使用联接等。