ИППП и подклассы - PullRequest
       1

ИППП и подклассы

2 голосов
/ 11 июня 2010

Я хочу знать, каков рельсовый способ преобразования записи подкласса в другую запись подкласса, просто изменение типа не работает, а также суперкласс в подкласс и наоборот.

Заранее спасибо

Маркив

Ответы [ 3 ]

2 голосов
/ 11 июня 2010

Все, что вам нужно сделать, это изменить поле типа. Обязательно сохраните запись и перезагрузите объект Ruby из базы данных.

Если это не сработает, можете ли вы предоставить какой-нибудь Ruby-код, который изолирует проблему?

0 голосов
/ 16 января 2013

Полиморфизм в Rails сделает свое дело:

subclass1record.becomes(Subclass2)

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

Чтобы избежать этого, вы можете сначала продублировать запись:

subclass1record_new = subclass1record.dup

А затем использовать вместо нее новую запись:

subclass1record_new.becomes(Subclass2)

http://apidock.com/rails/ActiveRecord/Persistence/becomes

0 голосов
/ 12 июня 2010

Вы спрашиваете, как изменить объект, который является подклассом, на другой подкласс его суперкласса? Это на самом деле невозможно в схеме вещей ОО. Можно привести объект из суперкласса к подклассу, но вы не можете привести его обратно, поскольку объект теперь может содержать переменные и методы, которых суперкласс не имеет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...