2010-09-02 8 views
1

Héritage de table unique à l'aide d'ActiveRecord. Puisque nous pouvons utiliser @test = Employee.all et trouver tous les employés créés. Comment les rails font-ils cela? Puisque nous utilisons seulement une table d'utilisateur. Comment connaît-il les employés et ne récupère que les employés? Rails Magic? Explication quelqu'un? Merci d'avance.Rails ActiveRecord Question

Base Class : Person (inherits ActiveRecord) 
Sub-Class: Employee, Supervisor, Manager (each inherit Person) 

donc ma table de personne a besoin d'avoir un champ de _type et _id pour faire la polymorphes table.

Ma question suivante est comment puis-je associer un employé à la table Person et quand vous enregistrez un employé, comment l'obtenez-vous dans Employee dans le champ person_type?

+0

Si vous souhaitez poser une question de suivi, il vaudrait mieux poser une nouvelle question et renvoyer à celle-ci en référence. Ce sera plus visible de cette façon et vous n'obtiendrez pas le problème des gens qui doivent mettre à jour leurs réponses. En outre, comme vous avez déjà accepté une réponse à cette question, les gens seront encore plus susceptibles de la vérifier. – Shadwell

Répondre

3

Pour indiquer à Ruby on Rails que la table des utilisateurs a besoin pour soutenir seul Tableau Héritage vous devez ajouter une colonne nommée « type » aux utilisateurs la table. Voici mes utilisateurs tableau définition:

CREER utilisateurs TABLE (id INT NOT NULL AUTO_INCREMENT, utilisateur VARCHAR (15) NOT NULL UNIQUE, passe VARCHAR (40) NOT NULL, le type VARCHAR (20) NOT NULL , CLÉ PRIMAIRE (id));

Dans la colonne type nommé vous devrait enregistrer le nom de la classe, le type de classe, qui devrait être utilisé pour chaque utilisateur. Pour marquer un certain utilisateur en tant qu'administrateur, définissez son type sur 'Administrateur'. En définissant le type d'un utilisateur sur 'Administrateur', vous lui donnez les droits d'administrateur complet définis dans votre classe Administrateur modèle .

http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/

+0

Merci pour la réponse, une fois que j'ai les champs _type et _id, comment puis-je réellement placer l'association dans cette colonne? – RoR

+0

Oh un champ en réalité nommé "type" Je pensais à l'héritage de table en utilisant _type. Je vous remercie. – RoR

2

héritage de table unique utilise une colonne type sur la table pour indiquer le type de l'objet. ActiveRecord sait que votre classe Employee utilise l'héritage de table unique (il n'y a pas de table correspondante et la table users/people a une colonne type). Donc quand vous demandez Employee.all, il sait chercher toutes les entrées dans la table users/people où type == 'Employee'.

Si vous regardez les journaux, le code SQL sera affiché pour ces requêtes et vous verrez la magie se produire.