【发布时间】:2015-05-04 09:07:31
【问题描述】:
我正在尝试使用自定义查询的结果(两个地理点之间的距离)作为模型属性。最终目标是能够使用该列过滤和排序行,例如:
Model.with_distance(point).order(:distance).first
我最初以为我可以在范围内使用select;这是一个没有消毒的较短版本:
scope :with_distance, ->(point) { select("ST_DISTANCE(models.point_in_model, ST_GeographyFromText('#{point.to_s}')) AS distance") }
但是,该范围仅选择 distance 列,而不检索模型属性:
> Model.with_distance(point)
[#<Model >, #<Model >,...]
将models.* 添加到select 调用可以解决问题,但代价是强制检索每个查询中的整行并忽略其他select 调用。
如何添加一个 SELECT 子句而不是替换所有子句?
【问题讨论】:
标签: ruby-on-rails postgresql activerecord ruby-on-rails-3.2 postgis