문제

멤버십 조인 테이블을 통해 그룹 구성원 인 사용자가 있으며 해당 조인 테이블의 속성 중 하나는 "관리자"입니다. 나는 그룹의 멤버 뷰 내부에서 수표를 작성하려고 노력하고 있으며 각 멤버를 통해 반복하여 관리자인지 확인합니다.

관점에서 나는 다음을 시도했다.

for user in @group.users
  if user.administrator?
    ...DO STUFF
  end
end

또한 컨트롤러에서 이것을 시도했습니다.

@administrators = @group.memberships.find(:all, :conditions => ["administrator = 1"])

그러나 운이 없습니다. 이견있는 사람?

업데이트 - 아래당, 메소드를 사용자 모델에 넣습니다.

def is_administrator_of(group_id)
        Membership.find(:first, :conditions => ['user_id = ? AND group_id = ? AND administrator = ?', self[:id], group_id, true])
end
도움이 되었습니까?

해결책

이를 달성하기 위해 연결을 설정할 수 있다고 생각하지만 가장 쉬운 방법은 사용자 모델에 메소드를 추가하는 것이며 각 사용자를 확인할 수있는 방법 (이 방법으로 제공 한 루프에 적합합니다). 그것이 바로 떨어질 것인지 모르겠습니다. 몇 가지 빠른 변경이 필요할 수 있지만 다음과 같은 것으로 시작할 수 있습니다.

사용자 모델

def is_administrator_of(group_id)
    Membership.find(:first, :conditions => ['user_id = ? AND group_id = ?', self[:id], group_id]).administrator == 1
end

다른 팁

나는 이것이 이것을하는 더 깨끗한 방법이라고 생각한다

class Group < ActiveRecord::Base
  has_many :memberships
  has_many :users, :through => :memberships
  has_many :admins, :through => :memberships, :source => :user,
           :conditions => ['memberships.administrator = ?', true] 
end

이제 Group.admins 목록이 있습니다

for user in @group.admins
    ...DO STUFF
end
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top