ActiveRecord按标题条件最近距离返回uniq项目

时间:2015-05-02 10:02:38

标签: ruby-on-rails postgresql activerecord

我有以下关系,因为同一产品可以存在于多个商店中,因此DB将相同的产品记录存储在数据库中,每个商店使用不同的store_id,我还存储每个产品的coords,现在我的查询按标题返回重复的产品对于每个商店。

为了快速修复,我如何修改查询,只返回最接近的产品,也可以按产品标题分组。 BTW我正在使用geocode gem和near函数来选择附近的产品([@ lat,@ long],20,顺序:@ sort.blank??'distance':false)

class Product < ActiveRecord::Base
   belongs_to :store
end

class Store < ActiveRecord::Base
   has_many :products
end

ID TITLE   STORE_ID
1  product_1  1
2  product_1  2
3  product_1  3

4  product_2  1
5  product_2  2
6  product_2  3

1 个答案:

答案 0 :(得分:0)

我认为你的模型存在误解。如果同一产品可以在多个商店中,则产品不属于商店。因为它可能有几个。

您应该将关联更改为has_and_belongs_to_manyhas_many through。但是,如果您确实希望完成此查询,则可以在查询中使用group方法。 与Product.near(...).group(:title)

一样

您也可以在Rails中过滤。假设它已经是一个有序的集合,比如

@products.to_a.uniq(&:title)

会起作用。