Rails Mysql适配器尝试查询没有支持表的抽象模型类

时间:2013-03-16 22:54:46

标签: mysql ruby-on-rails abstract

我有一个模型类“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'

2 个答案:

答案 0 :(得分:3)

这是3.1.0中的Rails错误。 https://github.com/rails/rails/issues/558

我已升级到3.1.11,错误再也没有发生过。

答案 1 :(得分:0)

您尚未运行迁移。这个错误就是这个。无论STI如何,ActiveRecord都需要一个ModBase表。所有STI都设置了“类型”列。

因为听起来你正试图减少设置表...你可能正在寻找的东西可能在ActiveModel中找到。基本上,如果没有数据库要求,你会获得很多AR优点。

Railscast on ActiveModel