我有一个与我挣扎的关联。我有一个部门模型,可以有很多工作人员,其中一个是经理。
我需要能够打电话。
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
我遇到的问题是,我必须将经理既作为经理又作为员工加入,感觉有点笨拙 - 但也许我有点挑剔?
有人可以建议一些更好的选择吗?
答案 0 :(得分:1)
尝试此关联:
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
的列。如果您的manager
表中有一个名为User
的布尔列,您将有一个方法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 column