2010-11-24 6 views
1

1) 인스턴스 객체로 찾기몽고 이드 구문 질문

@topic이라는 인스턴스 객체가 있다고 가정합니다. 이 주제에 대한 답변을 검색하고 싶습니다. 내가 전달할 수 있어야한다고 생각했다 : topics => @ topic,하지만 나는 아래의 아주 못생긴 쿼리를해야했다.

@answers = Answers.where(:topic_ids => {"$in" => [@topic.id]}) 

2) id의 문자열 표현을 가져 오는 중. 나는 사용자 정의 함수 (아래에 표시)가 있습니다. 그러나 이것이 매우 일반적인 요구 사항이 아니어야합니까? 당신의 협회가 올바르게 설정되어있는 경우

def sid 
    return id.to_s 
    end 

답변

2

, 당신은 할 수 있어야한다 : 그것은 위의 같은 소리

@topic.answers 

당신을 위해 무엇을 찾고 있습니다. 연결을 올바르게 설정했는지 확인하십시오. Mongoid는 연관성을 정의 할 때 매우 관대합니다. 따라서 불일치 같은 이름의 문제가 실제로 발생했을 때 references_manyreferenced_in에 올바르게 설정되어있는 것처럼 보일 수 있습니다.

@answers = Answer.where(:topic_ids => @topic.id) 

이 누구 topic_ids 제공된 ID를 포함 어떤 Answer 기록과 일치합니다 :

이 위의 문제가 해결되지 않는 이유 좋은 이유 그리고 당신은 쿼리를 사용해야하는 경우, 당신은이 간단한 쿼리를 사용할 수 있습니다 . 구문은 배열 필드의 경우 단일 값 필드의 경우와 동일하며 Answer.where(:title => 'Foo')과 같습니다. MongoDB는 필드가 배열인지 여부 (제공된 값이 배열에 있는지 확인) 또는 단일 값 (제공된 값이 일치하는지 확인)에 따라 쿼리를 다르게 해석합니다.

여기에 MongoDB를 배열 쿼리를 처리하는 방법에 대한 좀 더 정보입니다 : http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-ValueinanArray

+0

흠, 당신이 준 예는 작동하지 않는 것 - 내가 뭔가 잘못을하고있는 중이은? @answers = @ user.answers.where (: topic_ids.in => @ topic.id) –

+0

죄송합니다. 나는 잘못된 길로 인도했습니다. 이 유형의 쿼리를 위해서는'$ in' 연산자 (또는'.in' Mongoid Symbol 확장자)를 사용하지 말아야합니다. 업데이트 된 답변을 참조하십시오. – bowsersenior