У меня есть следующие модели и отношения:
У пользователя есть много предложений (где он / она является продавцом), предложение имеетмного покупок, покупка имеет много учетных записей
моделей и ассоциаций:
class User < ApplicationRecord
has_many :offers, foreign_key: :seller_id
has_many :purchases, foreign_key: :buyer_id
end
class Offer < ApplicationRecord
has_many :purchases
belongs_to :seller, class_name: 'User'
end
class Purchase < ApplicationRecord
belongs_to :offer
belongs_to :buyer, class_name: 'User'
has_one :seller, through: :offer
has_many :accbooks, class_name: 'Admin::Accbook', foreign_key: 'purchase_id'
end
module Admin
class Accbook < ApplicationRecord
belongs_to :purchase
end
end
Я хочу получить все учетные записи любого данного пользователя (в качестве продавца).Эквивалентный оператор SQL будет выглядеть так:
SELECT "accbooks".*
FROM "accbooks"
INNER JOIN "purchases" ON "purchases"."id" = "accbooks"."purchase_id"
INNER JOIN "offers" ON "offers"."id" = "purchases"."offer_id"
INNER JOIN "users" ON "users"."id" = "offers"."seller_id"
WHERE "users"."id" = ?
До сих пор я пробовал это:
Admin::Accbook.joins( {purchase: :offer} )
Что дает мне этот SQL в результате:
SELECT "accbooks".*
FROM "accbooks"
INNER JOIN "purchases" ON "purchases"."id" = "accbooks"."purchase_id"
INNER JOIN "offers" ON "offers"."id" = "purchases"."offer_id"
Теперь я не знаю, как добавить объединение в модель User, а затем как добавить условие Where.
Спасибо за понимание.