0

Imaginez que je possède un modèle appelé Course et que chaque cours comporte un grand nombre de Modules. Cependant, je veux que les modules soient d'une gamme différente.Comment modéliser une relation has_many polymorphe dans Rails 3

Par exemple, le modèle Module serait la classe parente et aurait deux champs: title et description qui seront communs à tous les types d'enfants.

Maintenant je dois Course être en mesure d'avoir un certain nombre de Slideshow, Video, Image, Text cas, mais ils doivent être récupérés par Course#modules.

Considérez que chaque type de classe enfant a ses propres attributs, comme Video pourrait avoir un champ url, alors que Text pourrait avoir contents, par exemple.

Quelle est la bonne façon de modéliser cette association?

+0

Cette question semble être similaire, peut-être vous trouverez quelques-unes utile information ici: http://stackoverflow.com/questions/3209322/rails-polymorphic-has-many –

Répondre

0

Je pense qu'il ya 2 options (éventuellement combinées):

  • utiliser des associations polymorphiques (voir "Polymorphic Associations" pour un exemple). Votre migration devrait ressembler à:

    create_table :courses do |t| 
        t.references :modules, :polymorphic => {:default => 'Text'} 
    end 
    
  • Utilisation unique Héritage de Table: Il vos modèles sont sous-classés d'une classe de base commune, ce qui est réalisé sur la base de données par une seule table qui contient toutes les colonnes pour toutes les classes de modèle .

Jetez un oeil à "Alex Westholms Blog" sur le 2, et la comparaison. Je pense que vous devriez aller avec des associations polymorphes, parce que vos modules ont beaucoup d'attributs différents.

1

Il est peut-être un peu en retard, mais ayant un modèle dans votre application appelée « Module » causera toutes sortes de problèmes avec les collisions de nom ...

+0

Merci Jules, mais c'est une traduction du portugais "Modulos" qui n'a pas de problèmes de conflit de nom. Mais bon point! – kolrie

Questions connexes