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.
我有一个 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.