2014-09-29 6 views
0

У меня есть модель, Offer. Каждый Offer has_one Location. Я пытаюсь использовать метод Geocoder gem near, чтобы получить все рядом Location s. Метод используется следующим образом:Сбор набора ассоциаций has_one в массиве

@nearby_locations = Location.near(address, 100, :order => :distance) 

Я не уверен, как заменить Location, в Location.near(), с каждым Offer-й связанным местоположением. Я могу получить доступ к каждому объекту Offer с @first_offer.location, но метод near вызывается на всей таблице Location. Как я могу собрать все Offer.location s в массив, чтобы я мог использовать этот метод для них?

Заранее спасибо. Надеюсь, у меня есть смысл. Если нет, просто оставьте комментарий.

ответ

1

Не уверен, что я полностью понимаю ваш вопрос, но я отвечу на него как можно лучше. offer.location возвращает коллекцию объектов местоположения, так что вы можете перебирать эти объекты и вызывать метод near по каждому из них:

offer.location.each do |location| 
    location.near 
end 

Однако, я не думаю, что это будет работать с методом near, поскольку он действует как класс уровня. Он не предназначен для работы над отдельной записью.

Geocoder gem предоставляет другие методы, которые можно использовать для отдельных записей, например distance_from. Таким образом, вы могли бы сделать что-то вроде:

offer.location.each do |location| 
    location.distance_from([40.714,-100.234]) 
end 

чекаут Geocoder docs для других доступных вызовов методов.

+0

Спасибо, я думаю, что я просто ищу другие методы, как вы предложили. – domi91c