2011-12-20 18 views
1

私は2種類のユーザを持っています:マネージャと従業員。私はそれらの両方に1つのユーザコントローラを使用します。ユーザタイプの定義、単一テーブルの継承(?)

私が追加したんでした:ユーザーテーブルにMANAGER_IDを、ユーザモデルに次のように置く:

class User < ActiveRecord::Base 
has_many :employees, :class_name => 'User', :foreign_key => :manager_id 
belongs_to :manager, :class_name => 'User' 

は十分に簡単に聞こえます。

今、ユーザータイプを定義します。ユーザーにマネージャーがいる場合、彼は従業員です。ユーザーにマネージャーがいない場合、マネージャーです。

私は、このようなように私の見解では、ユーザーのタイプを参照するように、モデルに追加するには何が必要なのか:

<% if current_user.manager? %> 
You are a manager. 
<% else %> 
You are not a manager. 
<% end %> 

私はuser.rbモデルでユーザータイプを定義しようとしましたが、私は取得しています「未定義のメソッド」マネージャーですか? NilClass」エラー:nilのため

def manager? 
    manager_id.nil? 
end 

def employee? 
    !manager? 
end 

答えて

1

Ryan Bigg氏のように、エラーメッセージをもう少し調べる必要があります。 manager?は、Userのインスタンスにメソッドとして存在しません。それはNilに存在しないということです。 current_userがない場合、が返され、manager?が呼び出されます。current_userが返されます。

このエラーを回避するために、これを試してください:あなたの答えのための

<% if current_user && current_user.manager? %> 
    Manager! 
<% elsif current_user %> 
    Not a manager, but a user! 
<% else %> 
    Not even a user. 
<% end %> 
+0

ああ!それはうまくいった。それは完璧な意味合いがあります。ありがとうございました。 – cdotfeli

1

この場合、あなたのcurrent_userオブジェクトは、あなたが取得しているエラーが発生した、nilです。 current_userでメソッドを呼び出す前に、まずユーザーがログインしていることを確認する必要があります。

+1

感謝。私の元の計画は実際にそれらをロールフィールドに格納することでしたが、従業員は各マネージャが持つことができる従業員の数に制限を設けたいので、マネージャに所属する必要がありました。ここから誰かがmanager_idフィールドを持つことが、それを実行する最善の方法だと指摘しました。 – cdotfeli

関連する問題