태그로 SO 검색을 원하므로 exists
쿼리가 필요하지만 여전히 모든 태그에 대해 왼쪽으로 조인해야합니다. 나는 몇 가지 접근법을 시도했고 아이디어가 없습니다.레일 ActiveRecord는 명명 된 범위의 태그로 질문 찾기
Qustion - 태그 관계 has_and_belongs_to_many
두 가지 방법을 통해 (즉 I 가지고 QuestionTags 소목 테이블)
예컨대
Question.join(:tags).where('tag.name = ?', tag_name).includes(:tags)
내가 무엇을해야 할이 기대하지만, 실제로는 단지 join
으로 includes
를 매쉬 난 그냥 기본적으로 내부 결합으로 끝낼.
Question.includes(:tags)
.where("exists (
select 1 from questions_tags
where question_id = questions.id
and tag_id = (select id
from tags
where tags.name = ?))", tag_name)
이 올바른 결과를 가져옵니다하지만이) 정말 못생긴와 b)로 다시 사용 중단 경고를 제공는 join
와 includes
혼동하는 것 같다
중단 경고 : 그것은 당신처럼 보인다 는 문자열 SQL sn ippet에서 참조되는 열거 형 테이블 (질문 : 태그 중 )을 열렬하게 읽습니다. 예를 들어 :
Post.includes(:comments).where("comments.title = 'foo'")
주 나는라는 이름의 범위로 다음을 작성하는 것을 시도하고있다.
질문이 명확하지 않은 경우 알려주십시오. 미리 감사드립니다.
내가 왜 내부 조인 혼란 스러워요 솔직히 말해서 당신은 왜 태그를 결합하는 것은 당신을 위해 작동하지 않는 세부에서 더 많은 이동하시기 바랍니다 수 있습니다, 당신을 위해 충분하지 않습니다? –
@EdgarsJekabsons 특정 태그로 태그 된 모든 질문 목록을 표시해야하지만 해당 목록 내에서 각 질문에 대해 모든 태그를 표시해야하므로 N + 1 조회를 피하십시오. 예 : 위의'sql' 태그를 클릭하여 필요한 것을하는 SO 페이지를보십시오. 내부 조인만으로는 각 질문에'sql' 태그 만 표시됩니다. – fearofawhackplanet