Merchant has_many Shops
Shop belongs_to Merchant
即。一个merchant
(星巴克)可以有很多商店。
我正在使用Gecoder来获取附近的商店,例如@shops = Shop.near("Times Square")
。
我想仅为每个商家返回1条记录。即@shops
只包含1个星巴克,1个地铁,但是是一个集合。
抱歉,我一直在谷歌搜索并搜索SO无济于事。也许我没有使用正确的词来描述我想要的东西。提前谢谢。
答案 0 :(得分:1)
要在scope
内回答您应该使用Google搜索,加入或合并查询的内容,可能会解决您的目标。如果您使用:or
逻辑组合查询构建范围,每个商店各一个,仅限于第一条记录,您应该得到您想要的内容。
我不会假装我理解Geocoder或高级范围足以做到这一点,但我找到了一个在另一个问题中显示这种方法的例子:
named_scope :or, lambda { |l, r| {
:conditions =>
"annotations.id IN (#{l.send(:construct_finder_sql,{:select => :id})}) or " +
"annotations.id IN (#{r.send(:construct_finder_sql,{:select => :id})})"
}}
这来自这个问题:Combine two named scopes with OR (instead of AND)
希望这可以帮助您找到解决方案。
答案 1 :(得分:1)
我用google搜索了一下,偶然发现了group by
的SQL。
如果我4 shops belonging to 2 merchants
附近有一个名为“莱佛士坊”的地方,请1 kilometer
内。
致电Shop.near("Raffles Place",1)
会返回4 shops
。
如果我向group
添加Shop.near("Raffles Place",1).group(:merchant_id)
,则仅返回2 shops
。
这也可以与其他条件一起使用,例如Shop.where(:featured=>true).group(:merchant_id)
仅显示每个特色商家的1个商店。