Помогите с Rails ActiveRecord в управлении запросами - PullRequest
0 голосов
/ 25 августа 2010

у меня 3 модели.Users, Groups, Employees у всех трех есть много ко многим.

  • у пользователя много групп
  • в группах много пользователей
  • в группах много сотрудников
  • у сотрудников много групп

Итак, я создал две новые модели:

  • Departments (обрабатывает многие ко многим между Users и Groups)
  • Employments (обрабатывает многие кмногие между Groups и Employees)

Я считаю, что у меня есть это исправление на бумаге, но я не могу записать его правильно, так как я новичок в рельсах.Из-за этого выборка данных кажется неправильной.

Вот что у меня есть: Занятость:

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

Отдел:

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

Пользователь:

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

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

Группа:

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

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

Сотрудник:

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

Я думаю, что самая большая проблема, которую я имею, состоит в том, чтобы выяснить, как получить total employees для пользователя.В SQL это будет работать с этим запросом:

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

1 Ответ

0 голосов
/ 27 января 2011

Это может сработать для вас ...

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 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...