限制活动记录查找的结果

时间:2009-07-30 07:43:55

标签: ruby-on-rails activerecord

我有一张包含员工(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并只返回元素,他/她应该看到吗?

2 个答案:

答案 0 :(得分:2)

也许:

Employee.all(:joins => :bosses, :conditions => {:superior_id => User.current_user.employee})

答案 1 :(得分:0)

您可以执行类似

的操作
@boss = Boss.find(params[:id], :include => [:employees])

取一位老板和他们的员工。然后使用

@boss.employees

获得该老板的员工。