0
我有一個巴士模型和事件模型。每輛巴士都要參加活動:我該如何構建這個複雜的ActiveRecord查詢?
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
。不知道這是否有幫助?
我想保持一切與ActiveRecord關係和範圍工作。據我瞭解,如果一個事件有6000個公交車到達(與我相伴一秒),軌道會將它們全部加載到內存中並遍歷其中的每一個。 Afaik有更好的辦法。 –