has_many의 값에 액세스 : 가입 테이블을 통해
-
20-09-2019 - |
문제
멤버십 조인 테이블을 통해 그룹 구성원 인 사용자가 있으며 해당 조인 테이블의 속성 중 하나는 "관리자"입니다. 나는 그룹의 멤버 뷰 내부에서 수표를 작성하려고 노력하고 있으며 각 멤버를 통해 반복하여 관리자인지 확인합니다.
관점에서 나는 다음을 시도했다.
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
제휴하지 않습니다 StackOverflow