我有一张包含员工(id,姓名,角色)和关系表老板的表(employee_id,superior_id;以及雇员和员工的外部钥匙。)
现在如果员工登录,我只想展示他/她的员工;管理员(角色=管理员)可以看到所有员工。
对于管理员来说很简单:
Employee.find(:all) #to list them
Employee.find(params[:id] #to find one
是否有一种简单的方法可以限制我的员工的结果?
喜欢一直添加一个条件
where employees.id in
(select id from bosses where superior_id = #{User.current_user.employee})
如果角色不是管理员。
其他评论
你能想到一个更通用的解决方案,每次调用活动记录中的find方法时,它会检查current_user并只返回元素,他/她应该看到吗?
答案 0 :(得分:2)
也许:
Employee.all(:joins => :bosses, :conditions => {:superior_id => User.current_user.employee})
答案 1 :(得分:0)
您可以执行类似
的操作@boss = Boss.find(params[:id], :include => [:employees])
取一位老板和他们的员工。然后使用
@boss.employees
获得该老板的员工。