Как написать: в рамках полиморфных отношений? - PullRequest
0 голосов
/ 30 января 2019

У меня есть модель Location, а у других моделей belongs_to :locatable, polymorphic: true

Итак, что-то вроде PlaceOfInterest может выглядеть так:

class PlaceOfInterest < ApplicationRecord
  belongs_to :user
  has_one :location, as: :locatable

  # how to do this part?
  scope :within,
    -> (latitude, longitude, radius_meters = 0) {
      where(%{ST_Distance(lonlat, 'POINT(%f %f)') < %d} % [longitude, latitude, radius_meters]) # approx
    }
end

Как я могуполучить lonlat, который существует в Location из PlaceOfInterest, чтобы написать область действия :within?

1 Ответ

0 голосов
/ 30 января 2019

Я не уверен, что полностью понимаю структуру вашей модели, но вы должны просто иметь возможность делать соединения до того, как.Обратите внимание на joins(:location) и имя столбца locations.lonlat

class PlaceOfInterest < ApplicationRecord
  belongs_to :user
  has_one :location, as: :locatable

  scope :within,
    -> (latitude, longitude, radius_meters = 0) {
      joins(:location).where(%{ST_Distance(locations.lonlat, 'POINT(%f %f)') < %d} % [longitude, latitude, radius_meters]) # approx
    }
end
...