2010-08-25 5 views
0

J'ai 3 modèles. Users, Groups, Employees tous les trois ont beaucoup à beaucoup.Aide avec Rails ActiveRecord gestion des requêtes

    utilisateur
  • a de nombreux groupes
  • groupes ont de nombreux utilisateurs
  • groupes ont beaucoup d'employés
  • employés ont beaucoup de groupes

J'ai donc créé deux nouveaux modèles:

  • Departments (gère plusieurs à plusieurs entre Users et Groups)
  • Employments (poignées plusieurs à plusieurs entre Groups et Employees)

Je crois avoir ce correct sur le papier, mais je ne peux pas descendre au code correctement car je suis nouveau sur les rails. Pour cette raison, l'extraction de données ne semble pas correcte.

C'est ce que j'ai: Emploi:

class Employment < ActiveRecord::Base 
    belongs_to :group 
    belongs_to :employee 
end 

Département:

class Department < ActiveRecord::Base 
    belongs_to :group 
    belongs_to :user 
end 

utilisateur:

class User < ActiveRecord::Base 
    has_many :departments 
    has_many :groups, :through=>:departments 

    has_many :employees, :through=>:departments, :source => :group 
end 

Groupe:

class Group < ActiveRecord::Base 
    has_many :departments #new 
    has_many :users, :through => :departments #new 

    has_many :employments 
    has_many :employees, :through => :employments 
end 

Employé:

class Employee < ActiveRecord::Base 
    has_many :employments 
    has_many :groups, :through => :employments 
end 

Je pense que le plus grand problème que j'ai est de savoir comment obtenir total employees pour un utilisateur. Dans sql, il travaillerait avec cette requête:

select * from employees where id in (select employee_id from employments where group_id in (select group_id from departments where user_id = 4)) 

Répondre

0

Cela pourrait fonctionner pour vous ...

class User < ActiveRecord::Base 
    has_many :departments 
    has_many :groups, :through=>:departments **, :include => :employee** 

    has_many :employees, :through=>:departments, :source => :group 
end 


User.find(4).groups.collect { |c| c.employee.size } 
Questions connexes