Nous avons une application rails qui utilise 2 modèles: Image et Vidéo. Ils appartiennent tous deux à une entité de collection. Ce qui se passe est que si nous voulons interroger ou utiliser les deux types d'une manière unifiée - nous ne pouvons pas. Donc, si nous voulons aller chercher les 15 derniers, nous interrogeons deux fois, puis nous trions puis nous reprenons les 15. Si nous voulons trouver() un certain identifiant, nous devons toujours obtenir quel type il est - vidéo ou image ...Conception d'une classe polymorphe
Nous réfléchissions donc à la façon de résoudre ce problème. Détient un modèle Asset qui pointe vers l'un ou l'autre? Sera-t-il capable d'être chargé?
Dans ma vision, il doit s'agir d'Asset.find (_id) et j'obtiendrai Image ou Vidéo agnostiquement.
Quelle est la manière la plus simple ou la plus correcte de résoudre cela dans Rails?
Merci!
Je pense que «enum» dans les rails est ce que vous cherchez. http://api.rubyonrails.org/v5.1/classes/ActiveRecord/Enum.html. J'espère que cette aide. – thanhnha1103
Il n'y a pas de façon correcte de résoudre ce problème car c'est un exemple de [Différence d'impédance relationnelle d'objet] (https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch). La façon la plus courante de résoudre ce problème consiste à utiliser une table unique ou un héritage de tables multiples. – max
L'utilisation de STI tel que décrit par Tamer vous permettra de faire MediaItem.find (id) et d'obtenir un modèle vidéo ou image en fonction du résultat – s1mpl3