0

次の属性を持つ単一テーブル継承を利用する変更モデルがあります。

id
type    #this is a single table inheritance type field.
description
dynamic_id

また、ChangeのサブクラスであるRaceとRaceのサブクラスであるWorkoutの2つのサブクラスがあります。

class Race < Change

end

class Workout < Race

end

Trackという4番目のクラスがあり、Changeオブジェクトのdynamic_idフィールドを使用して、次の4つの関連付けを作成したいと思います。(つまり、Changeテーブルにrace_idとworkout_idを明示的に追加していません。代わりに、dynamic_idをRaceクラスのrace_idとして使用し、dynamic_idをWorkoutクラスのworkout_idとして使用します)これを行うことで、多くのことを回避できます。私のデータベースのnilフィールドの。)

これが私が作成しようとしている4つの関連付けです。

  1. レースモデル-belongs_to:track
  2. ワークアウトモデル-belongs_to:track
  3. トラックモデル-has_many:races
  4. トラックモデル-has_many:workouts

:class_nameと:foreign_keyを使用して関連付けを使用してこれを実現しようとしていますが、機能していないようです。これは実際に可能ですか。おそらくベストプラクティスではないことは承知していますが、それでも実行可能かどうかを確認したいと思います。ご入力いただきありがとうございます。

4

1 に答える 1

2

あなたが探しているのは「ポリモーフィックな関連」です。詳細については、Railsガイドをご覧ください:http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

STIとのポリモーフィックな関連付けを使用したいので、あなたのケースは少し特別です。この組み合わせにバグがあったことを覚えていますが、今では修正できます。

私はそれを完全には読んでいませんでしたが、このブログ投稿は状況を説明しているようです:http ://www.archonsystems.com/devblog/2011/12/20/rails-single-table-inheritance-with-polymorphic-association/

ポリモーフィックアソシエーションとSTIで発生した問題について、ここで説明します。ポリモーフィックアソシエーションのタイプ列がSTIのベースモデルを指していない場合、なぜポリモーフィックアソシエーションがSTIで機能しないのですか?

于 2013-01-01T21:09:34.277 に答える