Rails在满足条件的情况下加入多态模型属性

时间:2019-06-26 15:55:27

标签: ruby-on-rails ruby activerecord polymorphic-associations

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

1 个答案:

答案 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的范围,该范围将返回管理员用户。