Salut à tous, j'ai quelque chose d'une exigence intéressante pour mon projet. J'ai besoin d'une relation has_one
où c'est soit une classe soit l'autre, mais sans héritage. Je pourrais m'en sortir avec l'héritage si c'est le seul moyen, mais les deux dossiers associés ont des données complètement différentes et ne sont pas liés du tout.RoR: has_one "ou l'autre"? (Ou, le polymorphisme sans l'héritage.)
Ce que je dois comprendre est quelque chose comme ce qui suit.
# 1. Foo never belongs to anything.
# 2. Foo MUST have one assigned sub-record for validity.
# 3. Foo can only have either Bar or Baz assigned.
# 4. Bar and Baz have only ONE common property, and aren't
# related in either data or implementation.
class Foo < ActiveRecord::Base
# Attributes: id, name, value
has_one :assignment, :foreign_key => 'assigned_to', :readonly => true
# Could really use an :object_type for has_one here...
end
class Bar < ActiveRecord::Base
# Attributes: name,...
end
class Baz < ActiveRecord::Base
# Attributes: name,...
end
Où Foo
a une affectation, de type soit Bar
ou Baz
; ils partagent seulement une colonne commune, alors peut-être que je peux en faire un objet parent. Cependant, si je les fais hériter d'un objet commun (quand les données qu'ils contiennent sont vraiment des oranges et des pommes) dois-je faire une table pour l'enregistrement? Puis-je m'en tirer si le disque est un disque abstrait, mais les enfants ne le sont pas? Je suppose que maintenant vous pouvez voir ma difficulté. Je suis plutôt nouveau à RoR mais l'aimer jusqu'à présent. Je suis sûr qu'il y a un moyen de contourner cela, mais je serai sidéré si je n'arrive pas à comprendre ce que c'est.
Bon point, mais parfois, nous ne sommes pas entièrement libres de la conception des bases de données ou de leur relation. Surtout lorsque vous travaillez avec un produit ou une bibliothèque produite par quelqu'un d'autre. Les deux relations de has_one fonctionneront bien; merci pour votre perspicacité. –