0

사용자 클래스와 HABTM 관계가있는 이벤트 클래스가 있습니다. 2 사용자가 연결된 이벤트 만 포함하는 이벤트 범위를 만들려고합니다. 기본적으로 나는 모든 "일치"이벤트를 포함하는 범위를 작성하는 방법을 찾기 위해 노력하고있어 그래서 지금HABTM 관계 수를 가진 레일 범위

def status 
    self.users.length == 2 ? "matched" : "not matched" 
end 

:

나는 현재 다음을 반환하는 이벤트 # 상태 방법이있다. 내가 전혀 작동하지 않았던 scope :matched, self.users.length == 2을 시도했지만, 내가 놓친 것과 비슷한 방법이 있습니까?

EDIT :이 클래스 메서드는 올바르게 처리하지만 스코프에 캡슐화 할 수 있다면 좋을 것입니다.

def self.pending 
    Event.all.map { |e| e if e.status == "matched" } 
end 

답변

0

여기에 몇 가지 문제가 있습니다. 지금 당장은 status 메서드가 리터럴 문자열을 반환하고 있습니다. 약간 놀랍습니다.이 반환 값을 부울 값으로 설정하는 것이 일반적입니다. 또한 status이라는 이름은 설명이 아닙니다. 아마도 exactly_two_users?이 좋을 것입니다. 또한 users.length 대신 users.count을 사용하면 DB가 더 효율적으로 계산을 수행합니다.

귀하의 범위는 단순히 where(:users.count => 2) 일 수 있습니다.

+0

사실 저는이 방법을 약간 단순화했습니다. 세 가지 상태를 반환해야합니다. '(: users.count => 2)'는 불행히도 작동하지 않았습니다. 심볼에 대한 계산 방법이 없다고 말합니다. –

+0

"users.count"가 대신 작동 할 수도 있습니다. 방금 성공하지 못한 구문을 빠르게 검색했습니다. 어쨌든, 그것은 기본 아이디어입니다. –