2012-12-26 3 views
0

Je travaille dans Ruby on Rails 3. Et essaye de tracer trois modèles qui imitent les données d'une entreprise ses employés et leurs départements respectifs.Association du modèle entre l'entreprise, l'employé et le département

En arrivé à la solution suivante:

class Company < ActiveRecord::Base 
    has_many :departments 
    has_many :employees, through => :departments 
end 

class Department < ActiveRecord::Base 
    belongs_to :company 
    has_many :employees 
    has_one :department_description 
end 

class DepartmentDescription < ActiveRecord::Base 
    belongs_to :department 
end 

class Employee < ActiveRecord::Base 
    belongs_to :department 
end 

Est-ce la « bonne » façon d'associer ces modèles?

+0

Il n'y a aucune raison (étant donné le contexte que vous avez fourni) pourquoi vous devriez avoir une table/un modèle séparé juste pour le 'département'': description'. Ajoutez cette colonne à 'Department' et supprimez la relation' has_one' sur ': department_description' – deefour

+0

True Je n'ai ajouté aucun contexte. Mais le cas étant le has_many: employees, through =>: départements fait effectivement de la table department-table (DB) une table de jointure, où la DepartmentDescription (nom, email, etc.) sera redondante. –

Répondre

0

Je pense que votre dernière réponse peut expliquer pourquoi vous avez du mal à trouver une façon correcte d'associer ces modèles.

Il semble que vous voyez votre département simplement comme une table join_table, et cela peut être dû au fait que vous ne comprenez pas complètement le has_many =>: grâce à la construction et qu'il permet réellement à votre département d'être un bon modèle avec beaucoup d'attributs et de méthodes, donc aussi un attribut 'description'.

La création d'un modèle DepartmentDescription distinct est en réalité une perte de ressources. Chad Fowler a quelques bons exemples pour: has_many => à travers et imbriqué des ressources dans ses Rails Recipes ... alors vérifiez cela.

Questions connexes