2015-02-06 68 views
0

我試圖改變用戶類型設置爲「無」,並不斷得到現在這個錯誤消息:Rails的單表繼承的ActiveRecord :: SubclassNotFound

的單表繼承機制未能找到該子類:「零」 。出現此錯誤的原因是「類型」列在保留繼承的情況下保留用於存儲類。如果您不打算將其用於存儲繼承類或覆蓋User.inheritance_column以使用其他列來處理該信息,請重命名此列。

from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/inheritance.rb:161:in `rescue in find_sti_class' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/inheritance.rb:155:in `find_sti_class' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/inheritance.rb:144:in `discriminate_class_for_record' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/persistence.rb:50:in `instantiate' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/querying.rb:48:in `block in find_by_sql' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/result.rb:55:in `block in each' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/result.rb:55:in `each' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/result.rb:55:in `each' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/querying.rb:48:in `map' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/querying.rb:48:in `find_by_sql' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/relation.rb:603:in `exec_queries' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/relation.rb:487:in `load' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/relation.rb:231:in `to_a' 
from /usr/local/rvm/gems/[email protected]/gems/bullet-4.13.1/lib/bullet/active_record41.rb:10:in `to_a' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/relation/finder_methods.rb:479:in `find_last' 
from /usr/local/rvm/gems/[email protected]/gems/activerecord-4.1.1/lib/active_record/relation/finder_methods.rb:165:in `last' 

我明白爲什麼它的發生,我確實希望出現的單表繼承,但它甚至不會讓我重寫它的Rails控制檯。我正在嘗試將用戶類型改回我需要的類型,並立即向我提供該信息。即使我做User.find(myID)它不會拉我的數據。

任何方式,我可以告訴它重寫它,並改變類型?

編輯:

我想:

User.last (I was the last user) 

User.find(*myId*) 

它甚至不會讓我做User.last.destroyUser.destroy_all,給了我同樣的錯誤在控制檯每次上面。

我也試過創建一個名爲「nil」的模型,它從用戶繼承而來,並且什麼也沒有。

+0

你寫'「無」'或' nil'?後者應該轉化爲SQL的NULL。提供您嘗試過的代碼示例和確切的輸出。 – 2015-02-06 16:22:12

+0

@ D方我實際上寫了「無」,所以它可能正在尋找一個實際類型的「無」 - 我試圖創建一個新的模型,實際上稱爲「無」,從用戶繼承,它仍然不會讓我做出改變,我假設因爲它現在是小寫字母。 – asalgan 2015-02-06 16:23:49

+0

這很可能是真的。儘管如此,您在控制檯中運行的代碼片段(和輸出)仍將有所幫助。將它們添加到問題中。順便說一下,代碼是通過用4個空格縮進來在問題中指定的。 – 2015-02-06 16:25:28

回答

3

好了,你搞砸了一點點:)

Rails的單表繼承預計type場的確切類的名稱。由於"nil"未指定有效的User子類,因此您已創建在STI方面沒有意義的對象。

這很容易修復。選擇所有errorneous項(含type"nil")和解決這些問題(設置typenil,這將成爲SQL NULL,意思是「基地班」在這裏):

User.where(type: "nil").update_all(type: nil) 
+0

謝謝。 '確切的類名'是我缺失的部分。 – Mosselman 2016-06-09 20:44:37