我有一个总线模型和一个事件模型。每辆公共汽车都要去参加一个活动:
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
。不确定这是否有帮助?
答案 0 :(得分:-1)
我认为加入是毫无意义的!你为什么不这样做?
@event.buses.each do |bus|
bus.origin.near([@lat, @long])
_do sth,..._
end
Beacause origin已与总线相关联,您已经拥有@event。