4

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

2 回答 2

3

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

我已经升级到 3.1.11 并且该错误再也没有发生过。

于 2013-05-02T18:49:42.107 回答
0

您还没有运行迁移。这就是这个错误的全部内容。无论 STI 如何,ActiveRecord 都需要一个用于 ModBase 的表。STI 所做的只是设置“类型”列。

由于听起来您正在尝试进行无表设置...您可能正在寻找的内容可能在 ActiveModel 中找到。本质上,您无需数据库要求即可获得很多 AR 优点。

在 ActiveModel 上的 Railscast

于 2013-05-02T14:51:28.700 回答