22 votes

Rails Model Inheritance

Si j'ai un utilisateur et que je veux créer différents types d'utilisateurs, disons des utilisateurs normaux qui n'ont qu'une adresse électronique et des abonnés qui ont un champ pour le site Web, comment puis-je faire en sorte que les abonnés héritent de tous les éléments des utilisateurs avec un simple champ ajouté ?

26voto

Olives Points 3925

Vous devrez créer une table avec tous les champs, et spécifier une colonne de type. Par exemple

create_table :users do |t|
  t.string :email
  t.string :website
  t.string :type
end

Ensuite, vous pouvez avoir des classes comme

Class User < ActiveRecord::Base

Class Subscriber < User

Un abonné héritera tout du modèle Users. La colonne type est là pour vous permettre de faire la distinction entre les différents modèles. Par exemple, en utilisant

Subscriber.all 

Il ne trouvera que les abonnés, alors que si vous n'utilisez pas la colonne "type", il trouvera aussi les utilisateurs.

13voto

Fred Points 4213

Vous voulez héritage d'une seule table décrite au lien par Alex Reisner. STI utilise une seule table pour représenter plusieurs modèles qui hériter de à partir d'un modèle de base. Dans le monde Rails, le schéma de la base de données possède une colonne qui spécifie le type de modèle représenté par la ligne. L'ajout d'une colonne nommée type dans une migration de base de données fait que Rails déduit que la table utilise STI, bien que la colonne puisse être un nom arbitraire si vous spécifiez le nom dans le modèle de données (voir le fichier méthode de classe "colonne_héritage". ). Notez que cela rend type un mot réservé.

Prograide.com

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.

Powered by:

X