2016-07-25 2 views
0

Я пытаюсь реализовать STI следующегоRails STI пространство имен классов без использования колонного типа

module ModuleName 
    class ParentName 
    self.inheritance_column = 'column_name' 
    end 
end 

module ModuleName 
    class ChildName < ModuleName::ParentName 
    class << self 
     def find_sti_class(type_name) 
     type_name = self.name 
     super 
     end 

     def sti_name 
     self.name.sub(/^.*:/,"") 
     end 
    end 
end 

Когда я пытаюсь

ModuleName::ChildName.create(column_name: 'ChildName') 

Я получаю следующее сообщение об ошибке

ActiveRecord::SubclassNotFound: Invalid single-table inheritance type: ChildName is not a subclass of ModuleName::ChildName 

Я пытаясь обратиться к решению, представленному здесь Rails STI: How to change mapping between class name & value of the 'type' column

Любая помощь оценили. Благодарю.

+0

Является ли '<< ModuleName :: ParentName' просто опечаткой или у вас на самом деле есть << там? –

+0

опечатка. исправит его. Я использую <в фактическом коде. – rohan

ответ

0

Ошибка, которую я делал, указывала столбец наследования при создании ChildName.

неправильно: -

ModuleName::ChildName.create(column_name: 'ChildName') 

право: -

ModuleName::ChildName.create() 

Он будет автоматически установлен column_name к 'ChildName' Задание будет делать рельсы думать, что ChildName является родительский класс и будет искать подклассы с именем ChildName

0
module ModuleName 
    class ParentName 
    self.inheritance_column = 'column_name' 
    end 
end 

module ModuleName 
    class ChildName << ParentName 
    # ... 
    end 
end 

Когда вы объявляете класс внутри модуля, он автоматически разрешает суперкласс к тому же модулю.

Таким образом, используя ChildName << ModuleName::ParentName, попробуйте решить проблему ModuleName::ModuleName::ParentName. Если вы хотите явно указать суперкласс, вы должны использовать ::ModuleName::ParentName.

+0

Пробовал использовать как дочернее имя << Имя родителя, так и дочернее имя << :: ModuleName :: ParentName. Я все еще получаю ту же ошибку. – rohan

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