2010-06-11 2 views
2

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

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

Маркив

ответ

2

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

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

+0

Thanx, который работал – markiv

0

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

+0

По названию этот пост, OP использует одностраничное наследование. –

+0

Вы правы, это возможно, хотя вы все равно можете тянуть материал, который не имеет смысла, но он не должен разрушать ваш объект. Меня интересует прецедент для этого, не мог бы вы подумать о том, что вам нужно было сделать, чтобы изменить столбец типа? – lambdabutz

0

полиморфизм в Rails будет делать трюк:

subclass1record.becomes(Subclass2) 

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

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

subclass1record_new = subclass1record.dup 

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

subclass1record_new.becomes(Subclass2) 

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

Смежные вопросы