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é ?
Réponses
Trop de publicités?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.
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é.