2012-02-24 50 views
1

Merchant has_many ShopsActiveRecord的 - 檢索一個記錄每個關聯

Shop belongs_to Merchant

即一個merchant(星巴克)可以有許多商店的位置。

我使用Gecoder來獲取附近的商店,例如@shops = Shop.near("Times Square")

我只想爲每個商家只返回1條記錄。即@shops只包含1個星巴克,1個地鐵,但是是一個集合。

對不起,我一直在谷歌搜索和SO搜索無濟於事。也許我不是用正確的詞來描述我想要的。提前致謝。

回答

1

我搜索了一下,並且發現了SQL的group by

如果我有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個商店。

1

要回答你應該使用Google搜索,加入或組合查詢scope可能會解決你想要做的。如果您使用:or邏輯組合查詢構建一個範圍,每個店鋪只有一個,限於第一條記錄,您應該得到您要查找的內容。

我不會假裝說我瞭解地理編碼或先進範圍足以做到這一點,但我發現,顯示了另一個問題,這種做法的例子:

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)

希望這可以幫助您找到解決方案。

+0

謝謝!哇2簡單的代碼行,但我的豌豆腦沒有真正得到它。我會試一試。您可以假設我只想要一個Shop.all,其中每個唯一的':merchant_id'只代表一次。 – 2012-02-24 06:58:29

+0

要清楚,這不是解決您確切問題的代碼。這只是一個概念的例子,你可能會開始用Google來學習如何解決你的問題。 – 2012-02-24 07:29:51

+0

當然是=)。我只是希望Rails可能有一些神奇的子彈來解決這個問題。我知道它是一個帶有「子查詢」的查詢。 – 2012-02-24 08:17:31

相關問題