2013-03-16 29 views
4

我有一個模型類「Abtest」,它從沒有支持表的抽象基類「ModBase」繼承。當Abtest.new被調用時,即使在ModBase類中我有「self.abstract_class = true」,我也會得到以下錯誤。我做錯了什麼?Rails Mysql適配器試圖查詢沒有支持表的抽象模型類

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

如果你的類沒有支持表,爲什麼讓它繼承自ActiveRecord? – Maran 2013-03-16 23:13:54

+0

它包含與AR相關的包裝函數,例如保存等。它將所有具有單獨表格的子類的共同性排除在外。我沒有使用STI。 – kimkunjj 2013-03-17 02:46:53

回答

0

您還沒有運行遷移。這是什麼錯誤是關於。無論STI如何,ActiveRecord都需要一個ModBase表。 STI所做的就是設置「類型」欄。

因爲它聽起來像你正在試圖做一個表更少的設置...你可能要查找的可能是在ActiveModel中找到。基本上,你可以在沒有數據庫要求的情況下獲得很多AR好處。

Railscast on ActiveModel