具有多态资源的ruby geocoder gem

时间:2011-10-24 16:41:20

标签: ruby-on-rails ruby-on-rails-3 geolocation polymorphic-associations

通过多态关联,我有一堆或地址属于各种其他资源

belongs_to :addressable, :polymorphic => true

和我的资源,让我们说它是一个酒店

has_one :address, :as => :addressable

我可以搜索我的地址数据没问题,查找我搜索字符串半径20英里范围内的每个地址,例如

@addresses = Address.near(params[:search],20, :order => :distance).page params[:page]

我真的很难加入资源,即酒店信息,我可以链接到详细信息页面,但我想在结果中显示酒店的名称。

我认为使用:include可能有帮助:

@addresses = Address.near(params[:search],20, :order => :distance, :include => :hotel).page params[:page]

..但没有运气

任何建议都非常感谢。

2 个答案:

答案 0 :(得分:4)

好的,我在同事的帮助下弄明白了

 @addresses = Address.where(addressable_type: 'Hotel').near(params[:search],20, :order => :distance).includes(:addressable).page params[:page]

希望它可以帮助别人!

答案 1 :(得分:0)

在您的地址模型中,我将定义与酒店模型的关系

belongs_to :addressable, :polymorphic => true
belongs_to :hotel, -> { where(adresses: {addressable_type: 'Hotel'}) }, foreign_key: 'addressable_id'

就像在这个答案中解释的那样,Eager load polymorphic

然后,就像地理编码器文档https://github.com/alexreisner/geocoder#known-issue中所解释的那样 我会按地点找到以下酒店:

Address.near(generic_address, radius, :select => "addresses.*, hotels.*").joins(:hotel)