: 사용자, 팀 및 회원 -레일 복잡한 대다 내가 3 개 모델있어 쿼리
class Team < ActiveRecord::Base
has_many :memberships
has_many :members, :through => :memberships, :source => :user
end
class User < ActiveRecord::Base
has_many :memberships, :dependent => :destroy
has_many :teams, :through => :memberships
def team_mates
teams = Team.where(:members => id)
team_mates = teams.members
end
end
class Membership < ActiveRecord::Base
belongs_to :user
belongs_to :team
validates :user_id, :presence => true
validates :team_id, :presence => true
end
을, 나는 꽤 사용자에 team_mates 방법을 작성하는 방법을 알아낼 수 없습니다 모델. current_user를 사용하여 팀에 속한 다른 사용자의 배열을 반환해야합니다. 내 생각으로는 현재 사용자가 회원 인 팀만 포함하도록 팀을 제한하는 범위를 사용해야하지만 구문을 이해할 수는 없습니다. 이것에 대한 도움은 크게 감사 할 것입니다.
감사합니다.
감사합니다. 우리가 해결책에 가까워지고있는 것 같습니다. 조인을 작동 시키려면 socoped.table로 사용자를 캐스팅해야했습니다. 그러나 이제 함수는 사용자 배열 대신 Arel :: SelectManager를 반환합니다. Arel :: SelectManager에서 사용자 배열을 추출하는 방법에 대한 아이디어가 있습니까? 여기 내 코드 (무서운 서식 미안)이다 : ' m = Membership.scoped.table U = User.scoped.table u.join (m) 어디에요 (m 데프 team_mates [: team_id] 실천할 (team_ids)). project ('distinct users. *') end' – spinlock
내가 원하는 것을 ActiveRecord Relation 객체로 변환하는 방법에 대해 살펴볼 것입니다. 아마도 그 마지막 문장의 결과를 가져 와서'.to_sql'을 한 다음'User.find_by_sql'에 그것을 전달할 수 있습니다 : def team_mates; m = Membership.scoped.table; u = User.scoped.table; sql = u.join (m) .where (m [: team_id] .in (team_ids)). project ('개별 사용자. *'). to_sql; User.find_by_sql (sql); end' – ctcherry
이 답변의 업데이트를 확인하십시오. – ctcherry