Почему Rails использует имя базового класса, а не имя подкласса, с ассоциациями polymorphi c и STI? - PullRequest
1 голос
/ 22 января 2020

Скажем, у меня есть наследование одной таблицы с BuyerInvoice наследованием от Invoice.

Если я назначу такой счет-фактуру ассоциации c polymorphi, Rails будет хранить, например, record_type: "Invoice" вместо record_type: "BuyerInvoice". В ней хранится record.class.base_class.name.

По каким причинам они могли это сделать? Я внедряю что-то неопределенно похожее и хотел бы понять, почему Rails мог принять это решение.

Лучшее, о чем я могу подумать, это то, что это немного облегчает переименование подклассов, не затрагивая ассоциации, хотя, делая это, иначе можно было бы переименовать абстрактные суперклассы ...

1 Ответ

1 голос
/ 22 января 2020

STI - это деталь реализации модели, она не должна просачиваться в ее отношения.

Кроме переименования подклассов:

  • STI может быть реализовано с пользовательским разрешением класса (с столбец типа (вообще не являющийся именем класса), даже есть некоторые странные случаи, когда класс динамически изменяется на основе атрибутов и т. д. c.
  • STI можно добавить в модель после того, как она уже имеет отношения
  • STI можно удалить вообще
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...