通过多态关联,我有一堆或地址属于各种其他资源
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]
..但没有运气
任何建议都非常感谢。
炖
答案 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)