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

次のcreateメソッドを使用する場合:

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

TrackConditionChangeレコードが作成され、typeフィールドが入力されますが、eventable_typeフィールド(Raceである必要があります)は入力されません。STIタイプのフィールドと同じように、レールがこのフィールドに自動的に入力されるという印象を受けました。私は間違った印象を受けていましたか、それとも私の協会の設定に問題がありますか?

入力ありがとうございます。

4

1 に答える 1

4

eventable_id だけを渡している場合、それがどのタイプであるかをどのように知るのでしょうか? eventable オブジェクト全体を渡すか、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 に答える