0

我有一个非常胖的用户模型。我想将某些方法从中分离出来,并将它们放入我将创建的新模型中,称为 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 就是这种情况?

4

1 回答 1

0

您可以像这样轻松地做到这一点:

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

  def method
  end
end

例如,为 admin 定义类,该类将从用户继承,但在设计中将保持单独的角色。

class Admin < User
  def some_method

  end
end
于 2012-08-22T00:44:38.347 回答