我将单表继承与多态关联结合使用。这是我的模型。
class ChangeInformation < ActiveRecord::Base
belongs_to :eventable, :polymorphic => true
end
class Race < ActiveRecord::Base
has_many :track_condition_changes, :as => :eventable, :class_name => "ChangeInformation"
#other associations omitted
end
class TrackConditionChange < ChangeInformation
end
change_information表包含以下字段:
type #sti field
change_code
eventalbe_id #polymorphic id
eventable_type #polymorphic type
description
当我使用以下create方法时:
TrackConditionChange.create(:change_code => 1, :eventable_id => 3 :description => "test")
创建了一个TrackConditionChange记录,并填充了type字段,但是eventable_type字段(应该是Race)没有填充。我的印象是rails自动填充这个字段,类似于STI类型字段。是我印象错了,还是我的协会设置有问题?
如果你只传递eventable_id,它怎么知道它是什么类型?您必须传递整个事件对象,或者基于track_condition_changes关系构建它:
1。传递事件对象:
race = Race.find(3)
TrackConditionChange.create(:change_code => 1, :eventable => race, :description => "test")
2。基于关系构建和保存:
race = Race.find(3)
race.track_condition_changes << TrackConditionChange.new(:change_code => 1, :description => "test")