2010-08-02 2 views
5

사용자 마스크가있는 비트 마스크 필드가있는 users 테이블이 있습니다. 로컬에서는 비트 마스크를 사용하여 특정 사용 권한이 있는지 여부를 확인할 수 있습니다 (UserPermissions&Perm)==Perm. 그러나 find_by_mask 또는 유사한 문자를 :conditions을 사용하여 발행 할 수 있기를 원하지만 일치하는 사용 권한 마스크가있는 사용자 목록을 검색하기 위해 데이터베이스를 쿼리하는 방법을 찾을 수없는 것 같습니다.ActiveRecord에서 비트 마스크로 검색

ActiveRecord를 사용하는 아이디어가 있습니까?

는 특히이 SQLite는과 포스트 그레스

답변

12

할 수있는 제정신 일을 사용하여 일해야한다, 내 의견으로는, 부울 필드의 시리즈로 비트 마스크 필드를 탈출하는 것입니다. 관계형 데이터베이스에 비트 마스크를 저장하는 것은 필드에 구분 된 목록을 저장하는 것과는 거리가 멀지 만 경계선 역 정규화가 아닙니다. 말했다

, 당신은 비트를 사용하고 & 연산자를 사용하여 SQL 쿼리에서, 그래서 당신은 말할 수 있습니다 :

User.where('permissions & ? > 0', Perm) 
+5

감사를 비트 정보를 원하시면. 나는 boolean을 사용하는 것에 대해 생각했지만, 나는 약 15 개의 권한을 가지고 있으며 나중에 더 추가 할 수있다. 비트 마스크를 사용하는 것은 테이블에 15+ 부울 값을 갖는 것보다 훨씬 깔끔합니다. –

관련 문제