Rails连接了满足条件的多态性模型属性



我不知道如何使此查询工作。我正在寻求获取具有管理用户的地址的所有用户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

您不能直接加入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的范围,该范围将返回管理员用户。

最新更新