0

私たちのアプリケーションには、2つのモデル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) 
    } 

これはを提供し、利用可能なジオコーダ機能を持っていないため、ファインダーのように動作しない仕事を得るように見えることはできません。

アイデア?私は基本的に、新しいスコープで関連オブジェクトのスコープを使用しようとしています。私はオファーをジオコーディングしたくない。それは冗長なデータなのだから。この1つにかなり困っている

答えて

0

ロジックを分割するだけで、まず近くのすべてのストアを取得し、それらのストアのオファーをロードします。擬似コード:

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

これは、作業を行いますが、2つの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