我不知道如何使此查询正常工作。我正在寻找具有管理员用户的地址的所有用户ID。
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
答案 0 :(得分:2)
您不能直接加入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
的范围,该范围将返回管理员用户。