Я пытаюсь сделать поиск очень сложным (конечно, чтобы было проще для пользователей)
У меня есть приложение с 3 моделями: кампании, предприятия и местоположения
вот так:
\\ campaign.rb
belongs_to :business
has_many :locations, :through => :business
acts_as_mappable
\\ business.rb
has_many :campaigns
has_many :locations
\\ location.rb
belongs_to :business
has_many :campaigns, :through => :business
acts_as_mappable
Как это настроено, есть некоторые предприятия, которые имеют несколько мест.Для тех, кто этого не делает, информация о геоките кодируется в запись базы данных кампании.Для тех, у кого есть несколько местоположений, информация о геоките закодирована в записи базы данных местоположений.
Я пытаюсь выполнить поиск кампаний, которые вернут результаты на определенном расстоянии.Это достаточно просто при работе с компаниями, имеющими один адрес.
Campaign.find(:all,
:conditions => [blahblahblah],
:origin => address,
:within => distance
)
Однако я хочу также включить кампании, которые принадлежат предприятиям, имеющим несколько местоположений.Я хочу, чтобы поиск возвращал результат для этой кампании, если у компании несколько местоположений, и если какое-либо из этих местоположений попадает в границы.Я думал что-то вроде:
Campaign.find(:all,
:include => [:business, :locations]
:conditions => [blahblahblah],
:origin => address,
:within => distance
)
Но это не возвращает никаких результатов для кампаний, которые принадлежат предприятиям, имеющим несколько местоположений.Я новичок, когда дело доходит до SQL, поэтому я не совсем уверен, как выполнить поиск по рельсам в одной модели (Campaign) и поиск по другой модели (бизнес-модели), чтобы получить результаты из модели Location.Тот факт, что геокит задействован, делает его еще более сложным.
Я пробовал: acts_as_mappable :through => :locations
в campaign.rb, но он просто выдал ошибку sql
Я испортил полиморфную модель "адресуемый ", но я обнаружил, что мне придется начать с контроллеров других моделей с нуля.
Я также думал о named_scopes, но я считаю, что geokit их не поддерживает.
Есть предложения?