2013-04-25 6 views
2

주로 RailsCast 스크린 캐스트 인 # 341을 기반으로합니다.PostgreSQL 전체 텍스트 검색 : 어떻게 범위를 지정합니까?

PostgreSQL 전체 텍스트 검색을 사용하려고하는데 작동하지만 스코프를 사용해야합니다. 검색은 객체를 통과해야합니다. object.state=='saved'.

스크린 캐스트에서 검색 방법은 클래스 메소드와 같이 정의되어 있으므로 'where'는 'Array'를 반환하고 검색 방법은 클래스 메소드이므로 'where'를 사용할 수 없으므로 여기에서 오류가 발생합니다.

@tests=Test.where(:state=>'saved') 
@tests.test_search(params[:query]) 

그러나 레일이 정의되지 않은 메서드에 오류가 발생합니다 이상 :

def test_search(query) 
if query.present? 
    self.where("title @@ :q or text_for_test @@ :q", q:query) 
else 
    scoped 
end 
end 

에 : 나는이 방식을 변경했습니다.

내 검색 범위를 좁히려면 어떻게해야합니까? 또는이 시도의 오류를 어떻게 수정합니까?

답변

2

포스트 글자를 전체 텍스트 검색하는 textacular gem을 사용하십시오.

명명 된 범위 사용 방법과 비슷한 textacular에서 제공하는 "basic_search"기능을 사용할 수 있습니다.

Test.basic_search('Sonic').where(:status => 'saved') 

Test.where(:status => 'saved').basic_search('Sonic') 
2
where("title @@ :q or text_for_test @@ :q and state @@ :state", q:query, state:'saved') 
관련 문제