2011-02-09 12 views
1

모델 및 관련 태그에 대해 다중 열 검색을 수행하려고합니다. 나는 metawhere를 사용하고 있으며, 이것을 위해 taggable-acts을 사용한다. 기본적으로 이름이있는 특정 양의 태그가있는 제목과 본문이있는 모델이 있습니다. metawhere를 사용하여이 쿼리를 설정하려고 시도했지만 모델의 태그에 조인 할 때 어떤 결과도 반환하지 않습니다. 나는 변수는 다음과 게시물 모델을 검색하는 데 사용되는 것 "STR"... 다음 SQL을 생성메타 위치가있는 태그 검색

Post.where(:title.matches % '#{str}%' | :body.matches % '#{str}%' | {:tags => [:name.matches % '#{str}%']}).joins(:tags) 

...

=> "SELECT `posts`.* FROM `posts` INNER JOIN `taggings` ON `posts`.`id` = `taggings`.`taggable_id` AND `taggings`.`taggable_type` = 'Post' INNER JOIN `tags` ON 'taggings.tagger_id IS NULL AND taggings.context = \\'tags\\'' WHERE (((`posts`.`title` LIKE '\#{str}%' OR `posts`.`body` LIKE '\#{str}%') OR `tags`.`name` LIKE '\#{str}%'))" 

이 사람이 날 지점 수라는 이름의 한 이것과 함께 올바른 방향으로? 어떤 도움이라도 대단히 감사하겠습니다.

+0

당신은이 쿼리에서 생성 된 SQL에 붙여 넣을 수 있습니다 (가정 연산자의 오버로드를 사용하도록 설정)? – idlefingers

+0

# {}에서 str 변수를 감싸는 것을 잊어 버렸고 생성 된 sql을 초기 질문에 추가했습니다. – Raj

답변

0

시도 :

.where((:title =~ str) | (:body =~ str) | {:tags => [:name =~ str]}) 
+0

어떤 이유로 이것은 "형식 불일치 : 주어진 문자열"이라는 형식 불일치 오류를 내고 있습니다. – Raj

+0

연산자 오버로드를 설정하는 것을 잊어 버렸습니다. 이제는 형식 불일치 오류가 발생하지 않지만 태그를 검색하지 않는 것 같습니다. – Raj

+0

그것은 매우 이상합니다. 기본적으로 문서에서 나온 것입니다. – thomasfedb