使用活动记录选择具有多对多关系的记录

时间:2013-05-17 14:29:22

标签: ruby-on-rails activerecord

我有一个Rails应用程序,它具有以下模型。 empgroup用于工作组和员工之间的多对多关系。

employee.rb

  has_many :empgroups
  has_many :workgroups, through: :empgroups

empgroup.rb

  belongs_to :employee
  belongs_to :workgroup

workgroup.rb

  has_many :empgroups
  has_many :employees, through: :empgroups
  has_many :workorders

我想要一份分配给员工所属工作组的工作人员的索引列表。

我希望这会奏效,但事实并非如此:

current_user.employee.workgroups.workorders.each do

它给了我:

undefined method `workorders'

所以,我正在尝试joins,但它也不起作用:

Workorders.joins(:workgroups => :employees).where(employee_id = current_user.employee).each do

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要收集工作组并遍历所有工作人员:

current_user.employee.workgroups.each |group| do
  group.workorders.each do
    ...
  end
end

答案 1 :(得分:0)

编辑 - 呃,我在想什么。

像这样:

@employee_workorders = Workorder.joins(workgroups: employees).where(employees: { id: current_user.employee })

current_user.employee.workgroups.map(&:workorders).flatten.uniq

应该为您提供一系列工作人员。