如何将Devise用户分成两部分?

时间:2012-08-22 00:12:58

标签: ruby-on-rails devise sti

我有一个非常胖的用户模型。我想将某些方法从它中分离出来并将它们放入我将创建的新模型中,称为Manager,它将继承自带有STI的User。

class User < ActiveRecord::Base
 ..
 def user_method
 end
end

class Manager < ActiveRecord::Base
 ..
 def manager_method
 end
end

我很好奇Devise如何处理这个问题。假设我已经有了一个用户,我们也说用户是经理。但是当他登录时,current_user对象将从User类实例化,对吧?我假设以真正面向对象的方式,Rails不允许我们从父类的实例访问子进程的方法......对吗?

那么我需要做些什么来确保current_user对象是type列中指定的类的实例,这是Rails中的STI的情况?

1 个答案:

答案 0 :(得分:0)

您可以轻松地这样做:

class User < ActiveRecord::Base
  ROLES = ['Admin', 'RoleX', 'RoleY']
  devise :database_authenticatable, :blah
  attr_accessible :email, :blah
  validates :something

  def method
  end
end

例如,为管理员定义将继承用户但仍将在设计中保持独立角色的类。

class Admin < User
  def some_method

  end
end