0

在我們的應用程序中,我們有兩個模型Stores和Offers。使用Rails作用域作爲相關對象範圍的代理

房屋使用「地理編碼器」寶石 http://rubydoc.info/gems/geocoder

地理編碼
class Store < ActiveRecord::Base 
    geocoded_by :address 
... 
class Offer < ActiveRecord::Base 
    has_and_belongs_to_many :stores 

的困境是,我希望能夠搜索使用從地理編碼器的「附近」的範圍上信息報價,不只是商店。我想使用這些優惠所屬的商店進行附近的搜索。但我似乎無法得到發現者正常工作

scope :nearby , lambda { |location, radius| 
    joins(:stores).near(location, radius) 
    } 

這不起作用的取景器是爲信息並沒有可用的地理編碼器功能。

任何想法?我基本上試圖在我的新作用域中使用相關對象的作用域。我不想對報價進行地理編碼,因爲這只是冗餘數據。相當難倒在這一個

回答

0

只要分手的邏輯:首先獲得所有商店附近,然後加載這些商店的任何優惠。僞代碼:

nearby_stores = Store.nearby(...) 
offers = Offers.where(:store_id => nearby_stores.collect { |s| s.id }) 
+1

這並不工作,但將其分解成兩個SQL調用,似乎不雅。不過,謝謝! – pyromanfo

1

我想你想:

class Offer < ActiveRecord::Base 
    has_and_belongs_to_many :stores 
    scope :nearby, lambda { |location, radius| 
     joins(:stores).merge(Store.near(location, radius)) 
    } 
end