従業員(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をチェックし、要素だけを返すたびに、彼/彼女は見るべき?おそらく、
はい、これは少なくとも1回は解決しますが、実際はもっと一般的な解決策を探しています。私がfindを呼び出すたびに、それはユーザーにユーザーを制限し、アクセス権を持っています。 – Beffa
名前のスコープおそらく、http://railscasts.com/episodes/108-named-scope –
あなたは私に正しい道を示しました。名前付きスコープのコードを使用して、スコープを自分で作成しました – Beffa