Comment mettre en œuvre l'héritage avec des enregistrements actifs ?
Par exemple, je veux une classe Animal, une classe Chien et une classe Chat.
Comment serait le modèle et le mappage des tables de la base de données ?
Comment mettre en œuvre l'héritage avec des enregistrements actifs ?
Par exemple, je veux une classe Animal, une classe Chien et une classe Chat.
Comment serait le modèle et le mappage des tables de la base de données ?
Rails supporte l'héritage d'une seule table.
De la Docs AR :
Active Record permet l'héritage en en stockant le nom de la classe dans une colonne qui, par défaut, est nommée "type". (peut être modifiée en écrasant Base.inheritance_column). Cela signifie qu'un héritage ressemblant à ceci :
class Company < ActiveRecord::Base; end class Firm < Company; end class Client < Company; end class PriorityClient < Client; end
Lorsque vous faites Firm.create(:name => "37signals"), cet enregistrement sera enregistré dans la table des entreprises avec le type = "Firm". Vous pouvez ensuite récupérer cette ligne en utilisant Company.find(:first, "name = '37signals'"), qui renverra un objet Firm.
Si vous n'avez pas de colonne de type définie dans votre table, l'héritage ne sera pas déclenché. Dans Dans ce cas, il fonctionnera exactement comme les normales, sans magie particulière pour les différencier ou recharger le bon type avec find.
Un bon tutoriel est disponible ici : http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/
ActiveRecord supporte le mappage des hiérarchies d'héritage à une seule table( Héritage à table unique . Le tableau aurait une colonne type
qui stocke le nom de la classe actuelle et est utilisé pour sélectionner d'autres colonnes spécifiques à la classe.
Il est possible d'implémenter le mappage d'héritage multi-table, comme indiqué aquí mais cette méthode particulière n'est pas portable, AFAIK.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.