2012-01-27 4 views
0

Я посмотрел вокруг, но не уверен, как это сделать ->Рельсы 3: MTI с дизайном и наследием?

У меня есть 1 Supertype и 2 подтипы в моем дб, а выложенные MTI, используя камень наследия и с проверкой по завещанию.

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 

Мой вопрос, как я могу проверить с, если заявление в пользовательской модели, чтобы проверить, какой тип I пользователь Я инстанцировании. И в том случае, когда я инстанцирование subuser, пропустить эту строку в пользователе ->

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

Я попытался 'если self.to_s == "Пользователь" Разрабатывают: database_authenticatable,: регистрируемые,: возмещена,: запоминающийся,: отслеживаются,: подтверждаемых end' Но он ничего не сделал .. –

+0

Вам нужно сделать все, что придумаете? Если вы удаляете «разрабатывать» строки из ваших подклассов - разве они не наследуются от пользователя? –

ответ

0

Если вы говорите упираться тестированием экземпляра пользователя, является ли это модель пользователя, то вы можете использование:

if self.is_a? User 

Если вы в классе, то я не знаю. возможно, попробовать что-то вроде:

if self.class_name == 'User' 

но это обычно неодобрительно - это своего рода код запаха необходимо знать, какой пользователь вы. Гораздо лучше переосмыслить проблему и выяснить, как лучше построить иерархию классов.

Есть ли способ «предшественника/наследника» делать такие вещи? Например, "если я предшественник, то ..."

Смежные вопросы