2009-07-30 4 views
0

従業員(ID、名前、ロール)とリレーションテーブルのボス(employee_id、superior_id、従業員の従業員.idへのforeign_keysの両方)を持つテーブルがあります。アクティブなレコードの結果を検索する

従業員がログインした場合、私は従業員を表示するだけです。管理者(ロール=管理者)はすべての従業員を見ることができます。

管理者にとっては簡単です:

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

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

はい、これは少なくとも1回は解決しますが、実際はもっと一般的な解決策を探しています。私がfindを呼び出すたびに、それはユーザーにユーザーを制限し、アクセス権を持っています。 – Beffa

+1

名前のスコープおそらく、http://railscasts.com/episodes/108-named-scope –

+0

あなたは私に正しい道を示しました。名前付きスコープのコードを使用して、スコープを自分で作成しました – Beffa

0

あなたは上司と従業員をフェッチするには

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

ような何かを行うことができます。その上司の従業員を取得するには

@boss.employees 

を使用してください。

関連する問題