我在各种类型的事件和许多事件has_many_polymorphs
之间有关系。Candidate
特别是,a 在创建时Candidate
会创建一个Created
事件。
class Candidate < ActiveRecord::Base
has_many_polymorphs :events, :through => :candidate_events,
:from => Event::Base.included_in_classes.map { |klass|
klass.to_s.underscore.pluralize.to_sym
})
after_validation_on_create :create_created_event
private
def create_creation_event
Event::Created.create!(:candidate => self, :creator => creator)
end
end
class CandidateEvent < ActiveRecord::Base
belongs_to :candidate
belongs_to :event, :polymorphic => true
end
module Event::Base
...
end
class Event::Created < ActiveRecord::Base
include Event::Base
validates_presence_of :creator
end
当我运行单元测试时,一切都很好。当我运行我的功能测试时,一切都很好。当我运行我的集成(Cucumber)测试时,一切都很好。当我在生产中运行时,一切都很好。当我尝试在开发模式下运行(打开类重新加载)时,我得到
Referential integrity violation; child <Event::Created:1> was not found for :events.
Expected record['candidate_events.event_id'] (1) to be equal to record['created_events.id'] ().
{
"candidate_events.event_type"=>"Event::Created",
"candidate_events.created_at"=>"2009-08-05 20:28:31",
"candidate_events.updated_at"=>"2009-08-05 20:28:31",
"candidate_events.candidate_id"=>"1",
"candidate_events.event_id"=>"1",
"candidate_events.id"=>"1"
}
在相同(开发)环境中运行script/console
,我看到该Event::Created
对象与CandidateEvent
交叉引用模型具有适当的关系。
这是怎么回事?