2013-06-26 1 views
0

저는 인증 된 사용자와 인증되지 않은 사용자 (데이터베이스의 email_authenticated : 부울로 구분 된)의 두 가지 유형의 사용자가있는 레일 응용 프로그램을 보유하고 있습니다. 사용자를 생성 할 때 인증을받지 못하게하려고하지만 모든 기능을 수행 할 때마다 기본적으로 인증 된 목록에서이를 수행하려고합니다. 나는 처음에 default_scope을 제공하여이 작업을 수행하기 위해 시도했지만레일 (또는 내가 가지고있는 것보다 더 나은 구현)에서 검색하고 저장하기 위해 다른 default_scopes?

# email_authenticated :boolean   default(FALSE), not null 

class User < ActiveRecord::Base 
    default_scope { where(email_authenticated: true) } 
    scope :authenticated, ->{ where(email_authenticated: true) } 
    scope :unauthenticated, ->{unscoped.where(email_authenticated: false)} 
end 

사람은이 있는가 (예를 들어, 기본이 예에서 오히려 거짓보다는 참으로 전환)이 저장되어있는 레코드가 기본을 무시하는 방식을 수정합니다 것을 발견 검색 범위에만 적용되는 방법에 대한 제안 또는 내가하려는 일을 성취하는 더 똑똑한 방법. 마찬가지로 기본 범위를 제거하면 검색 할 때마다 User.authenticated를 호출 할 필요가 없습니다. 마찬가지로 다른 쪽을 저장 할 때마다 User.unauthenticated를 호출하고 싶지 않습니다.

답변

1

는 종류의 해킹 것 같아,하지만 당신은 할 수 있습니다 :

class User < ActiveRecord::Base 
    default_scope { where("email_authenticated = ?", true) } 
end 

여기 문서화 : http://apidock.com/rails/ActiveRecord/Base/default_scope/class. 방금 테스트 해본 결과 부작용없이 작동합니다.

+0

감사합니다. 나는 똑같은 일을한다고 가정 했으므로 생각하지 못했을 것입니다. 그래도 그런 생각이 들지 않는다. –

관련 문제