2011-12-20 123 views
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」錯誤:

def manager? 
    manager_id.nil? 
end 

def employee? 
    !manager? 
end 

回答

1

就像Ryan Bigg說的,你需要仔細檢查一下錯誤信息。並不是manager?作爲User的實例上的方法不存在,而是它在Nil上不存在。當沒有current_user時,current_user返回nil,然後您打電話給manager?

嘗試使用此方法避免此錯誤:

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

啊哈!這工作。這很有道理。謝謝。 – cdotfeli 2011-12-20 23:27:42

1

在這種情況下,您的current_user對象nil,這會導致你得到的錯誤。在嘗試調用current_user上的方法之前,您需要先檢查用戶是否已登錄。

+1

謝謝您的回答。我原來的計劃實際上是將他們存儲在角色字段中,但員工需要屬於經理,因爲我想限制每位經理可以擁有的員工數量。有人從這裏指出,有一個manager_id字段是最好的方式去做。 – cdotfeli 2011-12-20 23:25:31