我有一个模型类“Abtest”,它继承自一个没有支持表的抽象基类“ModBase”。当调用Abtest.new时,我得到了以下错误,即使在ModBase类中我有“self.abstract_class = true”。我做错了什么?
class ModBase < ActiveRecord::Base
self.abstract_class = true
class Abtest < ModBase
ActiveRecord::StatementInvalid (Mysql::Error: Table 'mydb.mod_bases' doesn't exist: SHOW FIELDS FROM `mod_bases`):
activerecord (3.1.0) lib/active_record/connection_adapters/mysql_adapter.rb:435:in `query'
activerecord (3.1.0) lib/active_record/connection_adapters/mysql_adapter.rb:435:in `execute'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract_adapter.rb:244:in `log'
activesupport (3.1.0) lib/active_support/notifications/instrumenter.rb:21:in `instrument'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log'
activerecord (3.1.0) lib/active_record/connection_adapters/mysql_adapter.rb:435:in `execute'
activerecord (3.1.0) lib/active_record/connection_adapters/mysql_adapter.rb:636:in `columns'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:95:in `initialize'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:185:in `with_connection'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:92:in `initialize'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:112:in `call'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:112:in `default'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:112:in `[]'
activerecord (3.1.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:112:in `initialize'
activerecord (3.1.0) lib/active_record/base.rb:717:in `call'
activerecord (3.1.0) lib/active_record/base.rb:717:in `default'
activerecord (3.1.0) lib/active_record/base.rb:717:in `[]'
activerecord (3.1.0) lib/active_record/base.rb:717:in `column_defaults'
activerecord (3.1.0) lib/active_record/persistence.rb:327:in `attributes_from_column_definition'
activerecord (3.1.0) lib/active_record/locking/optimistic.rb:69:in `attributes_from_column_definition'
activerecord (3.1.0) lib/active_record/base.rb:1544:in `initialize'
app/models/abtest.rb:89:in `new'
答案 0 :(得分:3)
这是3.1.0中的Rails错误。 https://github.com/rails/rails/issues/558
我已升级到3.1.11,错误再也没有发生过。
答案 1 :(得分:0)
您尚未运行迁移。这个错误就是这个。无论STI如何,ActiveRecord都需要一个ModBase表。所有STI都设置了“类型”列。
因为听起来你正试图减少设置表...你可能正在寻找的东西可能在ActiveModel中找到。基本上,如果没有数据库要求,你会获得很多AR优点。