定义用户类型,单表继承(?)

时间:2011-12-20 23:07:15

标签: ruby-on-rails

我有两种类型的用户:经理和员工。我为它们使用了一个用户控制器。

我所做的是将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模型中定义用户类型,但我找到了一个未定义的方法&#39;经理?&#39;为零:NilClass&#34;错误:

def manager?
    manager_id.nil?
end

def employee?
    !manager?
end

2 个答案:

答案 0 :(得分:1)

在这种情况下,您的current_user对象为nil,这会导致您收到错误消息。在尝试调用current_user上的方法之前,您需要先检查用户是否已登录。

答案 1 :(得分:1)

像Ryan Bigg所说,你需要稍微查看一下错误信息。并不是manager?作为User实例上的方法不存在,而是Nil上不存在current_user。如果没有current_usernil会返回manager?,您可以在其中调用<% if current_user && current_user.manager? %> Manager! <% elsif current_user %> Not a manager, but a user! <% else %> Not even a user. <% end %>

请尝试以避免此错误:

{{1}}