【发布时间】:2015-02-07 22:46:28
【问题描述】:
这是我的场景:
我想在我的数据库中存储不同类型的事件。它们都共享相同的字段,但行为不同。因此我使用了单表继承。
事件的表定义如下:
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::Error: 表 'adserve_test.views' 不存在: SHOW FULL FIELDS FROM 'views'
我还尝试从控制台创建一个点击对象,这给了我同样的错误。任何想法如何解决这个问题?
【问题讨论】:
-
@shoji FactoryGirl 不应该是我认为的问题。因为我也尝试通过控制台创建一个新实例,它给了我同样的错误。
标签: ruby-on-rails single-table-inheritance