У меня есть модель автобуса и модель события.Каждый автобус идет на событие:
class Bus < ActiveRecord::Base
belongs_to :event
belongs_to :origin
end
class Event < ActiveRecord::Base
has_many :buses
end
Как видите, у каждого автобуса также есть источник (место, откуда он уходит).У происхождения может быть много автобусов, выходящих из него.Происхождение геокодируется ([Geocoder gem][1]
) при создании так, что с ним связаны широта и долгота.
class Origin < ActiveRecord::Base
has_many :buses
geocoded_by :full_address
def full_address
# returns the full address of the origin
end
end
Геокодирование также предоставляет им область действия near
, чтобы я мог искатьOrigin.near([lat, long])
.
Итак, я пытаюсь найти автобус, который идет к @event
и имеет источник, ближайший к [@lat, @long]
.
Примерно так:
Bus.where(:event_id => @event.id)
.joins(:origin)
.near([@lat, @long])
.first
Но, конечно, это ошибки, потому что Bus.where.joins
возвращает ActiveRecord::Relation
, но область действия near
относится к классу Origin
.
undefined method `near' for #<ActiveRecord::Relation:0x000001053b36d8>
Есть идеи?
Редактировать:
Мне пришло в голову, что я могу добавить has_many :through
ассоциаций к Event
и Origin
.Не уверен, что это поможет?