Rails activerecord 连接和复制数据

Rails activerecord joins and duplicates data

我有一个 route 模型

class Route < ActiveRecord::Base
  has_many :etapes
  acts_as_mappable :through => :steps
end

和一个 step 一个(包含纬度和经度)

class Step ActiveRecord::Base
  belongs_to :route
  acts_as_mappable
end

我正在尝试获得最接近给定点的 route

有了这个请求 Route.joins(:etapes).within(10, :origin => [1.23456,-5.3269]) 我可以得到 route 但是我得到了重复的信息(因为这个 route 有很多步骤接近给定点):

#<ActiveRecord::Relation [
#<Route id: 1, created_at: "2016-03-26 21:53:01", updated_at: "2016-03-26 21:53:01">, 
#<Route id: 1, created_at: "2016-03-26 21:53:01", updated_at: "2016-03-26 21:53:01">
]>

如何删除重复条目?

我的首选是

Route.joins(:etapes).within(10, :origin => [1.23456,-5.3269]).group(:id)

这会生成一个 GROUP BY `routes`.`id`,对于基本查询,它将为您提供所需的信息。但是,如果您需要 COUNT 这些,那么您需要更改策略,因为 COUNT 将在组内应用。

出于此目的,我倾向于避免使用 uniq 解决方案,因为我发现它的表现很糟糕。不确定这是否可以概括,但这可能与它生成一个 SELECT DISTINCT `routes`.* 有关,它比较所有列,即使你真的只需要 DISTINCT by id.