2015-02-06 110 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

相关问题