Динамически типизированные ассоциации с моделями ИППП - PullRequest
3 голосов
/ 23 января 2011

У меня есть родительская модель Учетная запись с несколькими подклассами с использованием STI.Я хочу связать другую модель Транзакция , используя отношение принадлежащие к Аккаунт .Ссылочной учетной записью может быть либо Актив , либо Ответственность .

class Account < ActiveRecord::Base end
class Asset < Account end
class Liability < Account end

Моя модель транзакции принадлежит к Счет

class Transaction < ActiveRecord::Base
  belongs_to :account #Either an Asset or Liability model
end

Я хочу иметь возможность установить для учетной записи транзакции Актив или Обязательство.Тем не менее, я получаю ошибку TypeMismatch, когда я устанавливаю учетную запись транзакции в качестве актива или пассива, так как это не родительский класс Account .

Примечание: я думаю, что это можно решить с помощью полиморфизма в ассоциации own_to, но, по-видимому, нет необходимости указывать класс в столбце типа, когда все модели, на которые ссылаются, используют одну и ту же базовую таблицу.

1 Ответ

2 голосов
/ 31 января 2011

Оказывается, этот код работает как есть. Вам не нужно указывать полиморфный тип в связанной модели с моделью STI.

Ошибка несоответствия типов, которую я получал, состояла в том, что мой базовый класс STI был фактически "Account :: Base", и у меня просто было "Account" в качестве имени класса.

...