2009-07-30 31 views
0

我有一張僱員(id,名稱,角色)和關係表老闆(employee_id,superior_id; foreign_keys到employees.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}) 

如果角色不是管理。

附加註釋

你能想到一個更通用的解決方案,其中每一個呼叫活動記錄的查找方法,它會檢查CURRENT_USER,只返回元素的時候,他/她應該看到了什麼?

回答

2

也許:

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

是的,這至少解決了它一次,但實際上我仍然在尋找一個更一般的解決方案。就像每次我打電話查找時,都會限制用戶訪問他/她的人。 – Beffa 2009-07-30 12:35:00

+1

命名示波器也許,http://railscasts.com/episodes/108-named-scope – 2009-07-30 13:20:13

+0

你給我看了正確的道路。我使用了命名範圍中的代碼爲自己寫了一個範圍 – Beffa 2009-07-30 14:06:41

0

你可以做這樣的事情

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

要獲取一個老闆和員工。然後使用

@boss.employees 

得到老闆的僱員。