大致模型结构是这样:用户 (多对多) 部门 (多对多) 部门经理。因为经理也是用户,所以数据库表是这样:
用户 (User) 部门 (Department) 部门经理 (User) 用户 | 部门关联 (DepartmentUser) 部门 | 部门经理关联 (DepartmentManager)
我想实现的是:查找用户 A 所在所有部门的经理们
我自己也摸索了一下,各种多对多的模型已经弄好,如下:
user.rb↓
class User < ActiveRecord::Base
#作为用户所属的部门们
has_many :departments_users
has_many :departments, :through => :departments_users
#作为经理掌管的部门们
has_many :departments_managers
has_many :directs, :through => :departments_managers, :source => :department
end
department.rb↓
class Department < ActiveRecord::Base
#部门的用户们
has_many :departments_users
has_many :users, :through => :departments_users
#部门的经理们
has_many :departments_managers
has_many :managers, :through => :departments_managers, :source => :user
end
departments_manager.rb↓
class DepartmentsManager < ActiveRecord::Base
belongs_to :department
belongs_to :user
end
departments_user.rb↓
class DepartmentsUser < ActiveRecord::Base
belongs_to :department
belongs_to :user
end
然后我假定的数据是这样:
自己用类似 User.find(1).departments 之类的查询试了几个都无误。然后我想查“用户 3 所在的部门的经理们”,就出现了问题:
User.where("users.id = 3").joins(:departments => :managers).map{|p| p.id}
=> [3, 3, 3]
我期望得到的是 [1,3,5] 才对。我怀疑是 where 条件里的 users.id = 3 写得不对,但这里不写 users.id 又写什么呢……