Rails присоединяется к атрибуту полиморфной модели, где выполняется условие - PullRequest
0 голосов
/ 26 июня 2019

Я не могу понять, как заставить этот запрос работать. Я ищу, чтобы получить все идентификаторы адресов пользователей, у которых есть пользователь, который является администратором.

Address
.near([@address.latitude, @address.longitude], 5)
.where(addressable_type: 'User')
.joins(:addressable)
.where('addressable.is_admin = ?', true)
.pluck(:id)

Address.rb

class Address < ApplicationRecord
  belongs_to :addressable, polymorphic: true

User.rb

class User < ApplicationRecord
  has_one :address, :as => :addressable, dependent: :destroy

1 Ответ

2 голосов
/ 26 июня 2019

Вы не можете напрямую присоединиться к отношению addressable, поскольку адресуемые объекты могут принадлежать различным моделям.Вы можете попробовать что-то вроде этого:

Address
  .near([@address.latitude, @address.longitude], 5)
  .where(addressable_type: 'User')
  .joins("INNER JOIN users on users.id = addresses.addressable_id")
  .merge(User.admin)
  .pluck(:id)

.merge можно использовать для вызова областей объединенных таблиц.Здесь модель User будет иметь область действия под названием admin, которая будет возвращать пользователей с правами администратора.

...