Rails 3:具有设计和遗产的MTI?

时间:2012-01-27 20:59:52

标签: ruby ruby-on-rails-3 devise

我环顾四周但不确定如何做到这一点 - >

我的数据库中有1个超类型和2个子类型,如MTI所示,使用Heritage gem并由Devise验证。

 class User < ActiveRecord::Base   
   acts_as_predecessor   
   devise :database_authenticatable, :registerable, :recoverable, 
          :rememberable, :trackable, :validatable 
 end

 class SubUser1 < User   
  acts_as_heir_of :user   
  devise :database_authenticatable, :registerable, 
          :recoverable, :rememberable, :trackable, :validatable  #some unique columns 
 end

 class SubUser2 < User
  acts_as_heir_of :user   
  devise :database_authenticatable, :registerable,    :recoverable,
 :rememberable, :trackable, :validatable   #Hi,some unique columns 
end

但是这个测试失败了。

 1) SubUser should create a new instance given a valid attribute
    Failure/Error: SubUser.create!(@attr)
    ActiveRecord::RecordInvalid:
    Validation failed: Predecessor password can't be blank

我的问题是如何使用用户模型中的if语句进行测试来测试我实例化的用户类型。在我实例化子用户的情况下,在用户中跳过此行 - &gt;

:database_authenticatable, :registerable, :recoverable, 
      :rememberable, :trackable, :validatable

1 个答案:

答案 0 :(得分:0)

如果您正在谈论测试用户的实例是否是用户模型,那么您可以使用:

if self.is_a? User

如果你在课堂上,那我就不知道了。也许尝试类似的事情:

if self.class_name == 'User' 

但它通常不赞成 - 这需要知道你是什么类型的用户的代码气味。重新思考问题并找出构建类层次结构的更好方法会好得多。

有没有“前任/继承人”做这种事情的方式?例如“如果我是前任,那么......”