2013-04-08 4 views
2

와 나는 책정 Rolify를 사용하여 레일 3.2.13 응용 프로그램을 개발하고 있어요, 나는 다음과 같은 3 개 사용자 유형이 필요합니다 :레일 STI는 유증 및 rolify 오류

class User < ActiveRecord::Base 
    rolify 
    ... 
end 

class UserTypeOne < User 
    .... 
end 

class UserTypeTwo < User 
    .... 
end 

class UserTypeThree < User 
    .... 
end 

내 DB를 시드 시도 사용자의 가야 작성이 작품을 좋아하지만 그 중 하나에 역할을 추가하는 동안 오류 제공 :

user = UserTypeOne.find_or_create_by_email :name => 'User one', :email => '[email protected]', :password => 'userone', :password_confirmation => 'userone' 
user.confirm! 
user.add_role :admin 

rake aborted! 
undefined method `find_or_create_by' for nil:NilClass 

을하지만 사용자가 올바르게 삽입 ... 내가 잘못 뭐하는 거지?

미리 감사드립니다.

+0

동일한 문제가 발생합니다. 해결책을 찾았습니까? – jacobsimeon

+0

@ Jacob 나는하지 않았다. 나는 STI 자체에서 필요한 기본적인 역할 기능을 구현할 수 있기 때문에 마침내이 프로젝트에서 Rolify를 제거하고 있습니다. 죄송합니다. – bigardone

답변

0

시도 상속 된 클래스 각각에

self.adapter = User.adapter 

를 추가.

예 :

이 나를 위해 일
class UserTypeOne < User 
    self.adapter = User.adapter 
    .... 
end 

.

0

ActiveRecord에서 STI를 사용하는 경우 Rolify는 부모 클래스가 아닌 현재 클래스 만 인식합니다. https://github.com/EppO/rolify/issues/138

Ethans 작동합니다 위의 대답

하지만 Here가 Rolify 자주 묻는 질문에 대한 대답입니다 : 여기

는 문제입니다.

개인적으로 나는 이러한 솔루션 중 하나를 좋아하지 않습니다. 아마도 클래스가 상속 될 때 Rolify가 어댑터를 전달할 수 있습니다. 예 :

def self.inherited(klass) 
    klass.adapter = self.adapter 
    super # EDIT: added super call to prevent ActiveRecord error (NoMethodError: undefined method `synchronize' for nil:NilClass) 
end