Почему полиморфная ассоциация `has_many` выбирает имя суперкласса для запросов? - PullRequest
0 голосов
/ 10 января 2019

У меня есть следующая полиморфная ассоциация в объекте 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

...