Factory Girl尝试访问使用单表继承时不存在的表

时间:2015-02-07 11:44:55

标签: ruby-on-rails single-table-inheritance

以下是我的情景:

我想在我的数据库中存储不同类型的事件。它们都共享相同的字段,但行为会有所不同。因此我使用了单表继承。

事件的表定义如下所示:

class AddEvents < ActiveRecord::Migration
  def up
    create_table :events do |t|
      t.date :event_date
      t.string :type
      t.references :trackable , :polymorphic => true
    end
  end

  def down
    drop_table :events
  end
end

我的事件类看起来像这样(最小工作示例):

class Event < ActiveRecord::Base

  self.abstract_class = true
  belongs_to :trackable, polymorphic: true

  [... some validation ] 
end

class View < Event; end
class Click < Event; end 
class Conversion < Event; end

表格创建得很好。但是当我试着打电话时:

@view1 = FactoryGirl.build(:view1)

:view1定义如下:

factory :click1, class: Click do
  event_date TEST_CLICK_1_EVENT_DATE
end

我收到以下错误消息:

失败/错误:@ view1 = FactoryGirl.build(:view1)      ActiveRecord的:: StatementInvalid:        Mysql2 ::错误:表'adserve_test.views'不存在:从'views'显示完整的字段

我还尝试从控制台创建一个click对象,这给了我同样的错误。任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

self.abstract_class=true父类中的问题是Event。我完全忘记了rails中的抽象类与C#或Java等语言完全不同。或者正如官方网站所说:

  

abstract_class
  如果这是一个抽象类,请将此属性设置为true(请参阅abstract_class?)。如果您使用ActiveRecord继承并且不希望子类使用父类的隐含STI表名,则必须为true。

100%不是我想要的。