2016-07-25 97 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() 

它會自動設置列名於 '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

嘗試使用ChildName << ParentName以及ChildName << :: ModuleName :: ParentName。我仍然得到完全相同的錯誤。 – rohan

相關問題