【问题标题】:ruby geocoder gem with a polymorphic resource具有多态资源的 ruby​​ geocoder gem
【发布时间】:2011-12-14 07:14:55
【问题描述】:

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

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]

.. 但没有运气

非常感谢任何建议。

炖菜

【问题讨论】:

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


    【解决方案1】:

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

    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)
    

    【讨论】:

      【解决方案2】:

      好的,我在一位同事的帮助下想通了

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

      希望它可以帮助别人!

      【讨论】:

      • 祝贺解决方案。如果可以,请确保将您的答案标记为“已接受”,以便其他人可以从您的成功中学习。干杯~
      猜你喜欢
      • 1970-01-01
      • 2012-06-18
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多