J'ai deux types de classes, dont l'une appartient à l'autre, et l'une appartient à l'autre.bidirectionnel appartient à (un polymorphe)
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
Les relations appartiennent à parce que je veux un accès rapide dans les deux sens. Je suis sous l'impression que la relation has_one
serait plus lente parce que vous auriez à interroger la table opposée pour rechercher un correspondant _id
.
En ce moment, quand je crée un cours c
, je cours une méthode after_save qui crée un terme t
tel que c.term = t
et t.reference = c
. Cela semble une sorte de hack si ... est-il possible de dire automatiquement aux rails que cette relation existe et que le réglage c.term = t
devrait automatiquement faire t.reference = c
?
Je sais qu'avec les associations polymorphes, vous pouvez spécifier l'attribut :as
(voir le API), mais il semble que cela ne fonctionne pas pour 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
hmm, d'accord, point pris. ajouter des index et effacer les associations bidirectionnelles 'belongs_to'. Merci. – unsorted
* polymorphisme;) – candrews