【发布时间】:2015-02-07 00:35:42
【问题描述】:
我尝试将用户类型更改为“nil”,但现在不断收到此错误消息:
单表继承机制找不到子类:'nil'。引发此错误是因为“类型”列保留用于在继承的情况下存储类。如果您不打算将该列用于存储继承类或覆盖 User.inheritance_column 以使用另一列存储该信息,请重命名此列。
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/inheritance.rb:161:in `rescue in find_sti_class'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/inheritance.rb:155:in `find_sti_class'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/inheritance.rb:144:in `discriminate_class_for_record'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/persistence.rb:50:in `instantiate'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/querying.rb:48:in `block in find_by_sql'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/result.rb:55:in `block in each'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/result.rb:55:in `each'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/result.rb:55:in `each'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/querying.rb:48:in `map'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/querying.rb:48:in `find_by_sql'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/relation.rb:603:in `exec_queries'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/relation.rb:487:in `load'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/relation.rb:231:in `to_a'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/bullet-4.13.1/lib/bullet/active_record41.rb:10:in `to_a'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/gems/activerecord-4.1.1/lib/active_record/relation/finder_methods.rb:479:in `find_last'
from /usr/local/rvm/gems/ruby-2.0.0-p481@rails-4.0.2/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.destroy 或User.destroy_all,每次在控制台中给我同样的错误。
我还尝试创建一个名为“nil”的模型,它继承自 User,但仍然没有。
【问题讨论】:
-
你写的是
"nil"还是nil?后者应转换为 SQL 的NULL。提供您尝试过的代码示例和准确的输出。 -
@D-side 我实际上写了“nil”,所以它可能正在寻找“nil”的实际类型 - 我尝试创建一个实际上称为“nil”的新模型,它继承自 User 并且它仍然不会让我进行更改,我假设因为它现在是小写的。
-
这可能是真的。尽管如此,您在控制台(和输出)中运行的代码的 sn-ps 仍然会有所帮助。将它们添加到问题中。顺便说一句,代码在问题中通过缩进 4 个空格来指定。
-
好的,我添加了上面使用的命令来访问我的用户记录,控制台每次都给我同样的错误,以及我的 Rails 错误消息。
-
试试
User.where(type: "nil").update_all(type: nil)
标签: ruby-on-rails activerecord