рубиновый геокодер гем с полиморфным ресурсом - PullRequest
3 голосов
/ 24 октября 2011

У меня есть группа или адреса, которые принадлежат различным другим ресурсам через полиморфную ассоциацию

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 ]

4 голосов
/ 28 октября 2011

ОК, я понял это с небольшой помощью коллеги.

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

Надеюсь, это поможет кому-то еще!

0 голосов
/ 11 января 2017

В вашей модели Адреса я бы определил отношение с моделью отеля

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

Как хорошо объяснено в этом ответе, Стремительная нагрузка полиморфная

Тогда,как объяснено в geocoder doc https://github.com/alexreisner/geocoder#known-issue Я бы нашел отели по местоположению, выполнив следующее:

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