[RUBY-ON-RAILS] 존재하지 않는 가입 기록을 찾기
RUBY-ON-RAILS존재하지 않는 가입 기록을 찾기
나는 사용자가 그들에 투표 여부를 모든 질문을 제한하는 범위를 가지고있다. 모델에서 :
scope :answered_by, lambda {|u| joins(:votes).where("votes.user_id = ?", u.id) }
scope :unanswered_by, lambda {|u| joins(:votes).where("votes.user_id != ?", u.id) }
컨트롤러에서,이처럼 전화 :
@answered = Question.answered_by(current_user)
@unanswered = Question.unanswered_by(current_user)
unanswered_by 범위는 올바르지 않습니다. 나는 기본적으로 투표권이없는 경우 찾고 싶어요. 대신, 현재 사용자와 동일하지 않습니다 투표가있는 경우를 찾기 위해 노력하고있다. 모든 아이디어를 어떻게이 존재하지 않는 조인 모든 레코드를 반환하는?
해결법
-
==============================
1.이 존재합니다 안티 - 세미 조인
이 존재합니다 안티 - 세미 조인
WHERE NOT EXISTS ( SELECT 1 FROM votes v WHERE v.some_id = base_table.some_id AND v.user_id = ? )
NOT이있는 사이 ... () (E) 및 NOT IN () (i)는 두 가지이다 :
본질적으로, (NOT) EXISTS 대부분의 경우에 더 나은 선택입니다.
귀하의 질의는 다음과 같이 수 :
SELECT * FROM questions q WHERE NOT EXISTS ( SELECT 1 FROM votes v WHERE v.question_id = q.id AND v.user_id = ? )
기본 쿼리에서 투표에 참여하지 마십시오. 즉, 노력을 무효화 할 것입니다.
게다가 NOT이 / 좌 가입도 NULL IS 존재 NOT IN. 더 많은 구문이 관련 대답 변종 :
-
==============================
2.이 시도하고 작동하는지 알려주세요
이 시도하고 작동하는지 알려주세요
EDIT-1
scope :unanswered_questions, lambda { joins('LEFT OUTER JOIN votes ON questions.id = votes.question_id').where('votes.question_id IS NULL') }
EDIT-2
scope :unanswered_by, lambda {|u| where("questions.id NOT IN (SELECT votes.question_id from votes where votes.user_id = ?)",u.id) }
-
==============================
3.내가 작성한 보석을 존재하는 당신이 원하는 경우 그리고 우아하고 레일 틱 방식으로 쿼리를 EXISTS, 당신은 사용할 수 있습니다 :
내가 작성한 보석을 존재하는 당신이 원하는 경우 그리고 우아하고 레일 틱 방식으로 쿼리를 EXISTS, 당신은 사용할 수 있습니다 :
Question.where_not_exists(:votes, user_id: current_user.id)
물론, 당신은뿐만 아니라 그것의 범위를 만들 수 있습니다 :
scope :unanswered_by, ->(user){ where_not_exists(:votes, user_id: user.id) }
from https://stackoverflow.com/questions/14251180/find-records-where-join-doesnt-exist by cc-by-sa and MIT license
'RUBY-ON-RAILS' 카테고리의 다른 글
[RUBY-ON-RAILS] 아마도 때문에 SSL에 -하지 액세스 젬 수 있습니까? [복제] (0) | 2020.02.20 |
---|---|
[RUBY-ON-RAILS] 경로 레일 - 자원에 사용 가능한 형식을 제한 (0) | 2020.02.20 |
[RUBY-ON-RAILS] (: 방법 => : 삭제) 작동하지 않는 3 LINK_TO 레일 (0) | 2020.02.20 |
[RUBY-ON-RAILS] 클립에 여러 파일을 업로드 (0) | 2020.02.20 |
[RUBY-ON-RAILS] 왜 액세스 액티브에 사용 "자기"/ 모델 속성 레일? (0) | 2020.02.20 |