Раствор 1
scope :not_owned_by_item_owner, -> {
joins(:item).where.not(
Blob.arel_table[:user_id].eq(Item.arel_table[:owner_id])
)
}
# SELECT "blobs".* FROM "blobs" INNER JOIN "items" ON "items"."id" = "blobs"."item_id" WHERE "blobs"."user_id" != "items"."owner_id"
Раствор 2
или, если вы предпочитаете сырой SQL:
scope :not_owned_by_item_owner, -> {
joins(:item).where('blobs.user_id != items.owner_id')
}
# SELECT "blobs".* FROM "blobs" INNER JOIN "items" ON "items"."id" = "blobs"."item_id" WHERE (blobs.user_id != items.owner_id) LIMIT $1
P.S. Я не думаю, что есть ActiveRecord
нативное решение для этого, но мне также интересно, если кто-нибудь найдет его. В приведенном выше решении 1 используется Arel
напрямую.