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 Ответ

1 голос
/ 25 августа 2010

Если вы правильно определили модель ActiveRecord «многие ко многим».

Вы можете сделать это, чтобы найти сотрудников, связанных с пользователем:

@user = User.find(params[:id])
@employees = @user.employees

Если вы хотитечтобы настроить ваши запросы, ознакомьтесь с этим документом - http://guides.rubyonrails.org/active_record_querying.html

Это позволит вам сделать все, от нетерпеливой / ленивой загрузки, объединения, группировки, ограничения и т. д.

Если вы хотитеиспользуйте исходный SQL, чтобы разобраться, прежде чем писать более чистый код, посмотрите раздел «поиск по sql» на той же странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...