У меня есть модель с has_many
, и я пытаюсь использовать столбец jsonb в качестве внешнего ключа. Я использую postgres в качестве базы данных.
has_many :accounts, foreign_key: "item->>'Id'", primary_key: "item->>'AccountId'"
SQL выглядит следующим образом (обратите внимание на цитаты вокруг полей соединения, где оно "accounts"."item->'Id'"
SELECT "opportunities".* FROM "opportunities" INNER JOIN "accounts" ON "accounts"."item->>'Id'" = "opportunities"."item->>'AccountId'" WHERE "opportunities"."item->>'AccountId'" IS NULL
Я пробовал нижеприведенное, который работает, но первичные ключи фактически игнорируются (вероятно, из-за вызова unscope
).
has_many :accounts, ->{
joins("inner join opportunities on opportunities.item->>'AccountId' = accounts.item->>'Id'").unscope(:where)
}, foreign_key: "item->>'Id'", primary_key: "item->>'AccountId'"
Без вызова unscope
, следующий оператор выбора произведено:
SELECT "accounts".* FROM "accounts" inner join opportunities on opportunities.item->>'AccountId' = accounts.item->>'Id' WHERE "accounts"."item->>'Id'" IS NULLs
Помимо дублирования данных ассоциации в столбец, есть идеи, как заставить это работать?