我有一个我正在与之斗争的协会。我有一个部门模型,它可以有许多员工,其中一个是经理。
我需要能打电话。
Department.staff -并获取包括经理在内的所有员工的集合。Department.manager -把经理叫来。
User.department -并获得用户部门,无论他们是员工还是经理。User.is_manager -并获取关于他们是否管理部门的布尔值。User.manages -获取他们管理的部门。
建立这个协会最好的地方是什么?我现在已经开始这样做了:
class User < ActiveRecord::Base
belongs_to :department
has_one :manages, :class_name => 'Department', :foreign_key => :manager_id
end
class Department < ActiveRecord::Base
belongs_to :manager, :class_name => "User"
has_many :staff, :class_name 'Users'
end我的问题是,我必须将经理同时添加为经理和员工,这感觉有点笨拙-但也许我太挑剔了?
有没有人能推荐一些更好的选择?
发布于 2012-12-04 05:03:22
尝试此关联:
class Department < ActiveRecord::Base
has_many :staffs, class_name: "User"
has_one :manager, class_name: "User", foreign_key: "manager_id"
end
class User < ActiveRecord::Base
belongs_to :department
end确保您的User表有一个名为manager_id的列和一个名为department_id的列。如果您的User表中有一个名为manager的布尔列,那么您将拥有一个manager?方法来检查用户是否是管理者。
做你想做的事:
@department = Department.find(1) # Find department with id = 1
@department.staffs # Get all staffs of department
@department.manager.name # Get name of manager of department
@user = User.find(1) # Find user with id = 1
@user.department.name # Get name of department which user belongs to
@user.manager? # Return value of manager columnhttps://stackoverflow.com/questions/13691393
复制相似问题