我正在尝试按如下方式实施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 :(得分: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
。
答案 1 :(得分:0)
我正在做的错误是在创建ChildName时指定继承列。
错误: -
ModuleName::ChildName.create(column_name: 'ChildName')
右: -
ModuleName::ChildName.create()
它会自动将column_name设置为&#39; ChildName&#39; 指定它将使rails认为ChildName是父类,并将查找名为ChildName的子类