1

사용자라는 모델이 있는데, 그 중 일부는 작성자로 간주됩니다. 이것은 역할이라는 테이블을 통해 수행됩니다.이 테이블에는 다양한 역할이 나열됩니다. "작성자"는 하나입니다. 권한 링크라는 테이블의 다 대다 연관은 역할과 사용자를 연결합니다.레일스 ActiveRecord : 주어진 권한을 가진 모든 사용자를 선택하는 방법?

사용자에게 작성자 권한이 있는지 확인하려면 특정 사용자에게 연결된 사용 권한을 통해 실행되는 방법이 있으며 해당 사용자 중 누구도 작성자 권한으로 연결되는지 여부를 반환합니다.

이 시스템은 저를 잘 지원해 왔습니다. 그러나 사이트에서 Authors를 검색하고 주문하는 것은 어색합니다. 제가하고 싶은 것은 간단하고 우아하고, 이상적으로는 Users.authors.order ("date_joined") 같은 것을 말할 수있는 명명 된 범위와 같습니다.

지금 당장 나는 모든 사용자를 데이터베이스에서 끌어 와서 한 번에 하나씩 실행하고 작성자 권한을 검색하는 것 이외에 "작성자"사용자 그룹을 얻는 방법이 없습니다. 발견 된 경우 사용자 배열에 추가 할 수 있습니다.

보기에 저자 목록을 표시 할 때마다이 작업을 수행해야하므로이 작업은 다소 무리가 있습니다.

더 좋은 방법이 있습니까?

편집 - 솔루션 :

아래에 도움이되는 조언과 내가 함께 다음을 넣을 수 있었다 http://railscasts.com/episodes/215-advanced-queries-in-rails-3?view=asciicast에서 팁에 따라. User.rb에서

: Permission.rb에서

class User < ActiveRecord::Base 
     scope :authors, joins(:permissions) & Permission.author_permissions 
     scope :admins, joins(:permissions) & Permission.admin_permissions 

:

class Permission < ActiveRecord::Base 
     scope :author_permissions, where("role_id = ?", Role.find_by_rolename("author")) 
     scope :admin_permissions, where("role_id = ?", Role.find_by_rolename("administrator")) 

그리고 짜잔! 이제 Users.authors라고 부르면 매력처럼 작동합니다.

답변

3

보유하고있는 스키마 구조를 유지하면서 적절한 테이블 인덱스를 추가하십시오.

그런 다음

User.all(:joins => :roles, 
     :conditions => {:roles => {:id => pick_a_role_id}}) 
+0

이것은 내가 바라는 바로 그 것이다. 정말 고마워. (또한 http://railscasts.com/episodes/215-advanced-queries-in-rails-3?view=asciicast에서 유용한 구문 도움말을 얻었습니다.) – isthmus

2

당신은 CanCan을 보았습니까? 아마도 약간의 리팩토링이 필요할 것이고, 주로 current_user 메소드를 생성해야합니다. 역할에 대한 지침은 찾을 수 있습니다. here

+0

좋은 제안을 할 수있는 특정 역할의 사용자를 쿼리합니다. Ryan Bates는 내 개인적인 레일 영웅이기 때문에 CanCan에서 꽤 팔리면 ... 리팩토링을위한 시간을 갖게됩니다. 머리를 가져 주셔서 감사합니다. – isthmus

+0

@isthmus'CanCan'은 매우 훌륭하지만 역할과 분리되어 있습니다. 따라서이 부분을 직접 수행해야합니다. 또는 보석 등을 사용하십시오. 기본적으로'CanCan'을 사용하면 여기에 게시하는 문제를 해결할 수 없습니다. – Dty