【发布时间】:2011-10-18 10:59:48
【问题描述】:
我有一个总线模型和一个事件模型。每辆巴士都去参加一个活动:
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。不确定这是否有帮助?
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 activerecord geocoding arel