Использование области Rails в качестве прокси для области видимости связанного объекта - PullRequest
1 голос
/ 14 июля 2011

В нашем приложении есть две модели: магазины и предложения.

Магазины геокодируются с использованием гема 'geocoder' 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)
  }  

Это не работает, поскольку искатель предназначен для Предложения и не имеет доступных функций геокодера.

Есть идеи?Я в основном пытаюсь использовать область связанного объекта в моей новой области.Я также не хочу геокодировать предложения, поскольку это просто избыточные данные.Довольно тупо на этом

Ответы [ 2 ]

2 голосов
/ 09 сентября 2011

Я думаю, что вы хотите:

class Offer < ActiveRecord::Base
  has_and_belongs_to_many :stores
  scope :nearby, lambda { |location, radius| 
      joins(:stores).merge(Store.near(location, radius))
    }
end
0 голосов
/ 14 июля 2011

Просто разбейте логику: сначала найдите все магазины поблизости, а затем загрузите любые предложения для этих магазинов.Псевдо-код:

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