私は2種類のクラスを持っています。そのうちの1つは他の種類に属し、もう1つは多態的に他の種類に属します。双方向のbelongs_to(1つのポリモフィック)
class Term < ActiveRecord::Base
belongs_to :reference, :polymorphic => true
end
class Course < ActiveRecord::Base
belongs_to :term
end
class Career < ActiveRecord::Base
belongs_to :term
end
私は両方向で高速アクセスが必要なので、関係はbelongs_toです。私はhas_one
の関係がより遅い印象を受けています。なぜなら、一致するものを検索するために反対のテーブルをクエリする必要があるからです。_id
。私はもちろんc
を作成するときに
は今のところ、私は用語t
ようc.term = t
やt.reference = c
を作成after_save方法を実行します。これは一種のハックだと思われますが...この関係が存在し、c.term = t
を設定すると自動的にt.reference = c
になるはずです。
多形性の関連付けでは、:as
属性(APIを参照)を指定できますが、これはbelongs_toでは機能しないようです。
class Asset < ActiveRecord::Base
belongs_to :attachable, :polymorphic => true
def attachable_type=(sType)
super(sType.to_s.classify.constantize.base_class.to_s)
end
end
class Post < ActiveRecord::Base
# because we store "Post" in attachable_type now :dependent => :destroy will work
has_many :assets, :as => :attachable, :dependent => :destroy
end
ええ、大丈夫です。インデックスを追加し、双方向の 'belongs_to'関連付けをワイプします。ありがとう。 – unsorted
*多型;) – candrews