1

我将单表继承与多态关联结合使用。这是我的模型。

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_informations 表具有以下字段:

type               #sti field
change_code
eventalbe_id       #polymorphic id
eventable_type     #polymorphic type
description

当我使用以下创建方法时:

TrackConditionChange.create(:change_code => 1, :eventable_id => 3 :description => "test")

创建了一个 TrackConditionChange 记录,其中填充了 type 字段,但是,未填充 eventable_type 字段(应该是 Race)。我的印象是 rails 会自动填充此字段,类似于 STI 类型字段。是我有错误的印象还是我的关联设置有问题。

感谢您的输入。

4

1 回答 1

4

如果你只传入 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")
于 2013-01-07T02:26:30.093 回答