У меня есть следующая полиморфная ассоциация в объекте Active Record
#table_name: ledger_entries
#ledgerable_type
#ledgerable_id
class LedgerEntry::MerchantAccount < LedgerEntry
belongs_to :ledgerable, polymorphic: true
end
Тогда у меня есть одна ассоциация
class Job::Cleaning < Job
has_many :merchant_ledgers, as: ledgerable
end
Я ожидаю, что мой запрос Job::Cleaning.last.merchant_ledgers
будет искать записи в регистре, где ledgerable_type
был Job::Cleaning
, вместо этого он ищет ledgerable_type
Job
. Вместо использования фактического класса, он использует родительский класс.
До того, как я поместил эту декларацию об ассоциации в Job
и подумал, что ее перемещение в Job::Cleaning
решит проблему. Но это остается.
Вот журнал sql
[17] pry(main)> Job::Cleaning.last.merchant_ledgers.last
Job::Cleaning Load (0.9ms) SELECT "jobs".* FROM "jobs" WHERE "jobs"."deleted_at" IS NULL AND "jobs"."type" IN ('Job::Cleaning') ORDER BY "jobs"."id" DESC LIMIT $1 [["LIMIT", 1]]
LedgerEntry::MerchantAccount Load (0.7ms) SELECT "ledger_entries".* FROM "ledger_entries" WHERE "ledger_entries"."type" IN ('LedgerEntry::MerchantAccount') AND "ledger_entries"."ledgerable_id" = $1 AND "ledger_entries"."ledgerable_type" = $2 ORDER BY "ledger_entries"."id" DESC LIMIT $3 [["ledgerable_id", 135277], ["ledgerable_type", "Job"], ["LIMIT", 1]]
=> nil