2011-04-29 2 views
2

난 내 레일 3 앱에서 meta_search를 사용하고 있습니다. 기본적으로 (검색 버튼을 누르기 전에) meta_search는 검색 모델의 모든 요소를 ​​반환합니다. 사용자가 검색 버튼을 누르거나 검색 매개 변수가 비어 있기 전에 0 결과를 설정하려고합니다.사용자가 검색 버튼을 누르기 전에 meta_search에서 0 결과를 설정하는 방법

def index 
@search = Article.search(params[:search]) 
    if params[:search].blank? 
    @places = nil 
    else 
    @places = @search.all 
    end 
end 

검색 PARAMS이 비어있는 경우 0 결과를 설정하는 가장 좋은 방법은 무엇입니까 다음과 같이

나는 meta_search를 사용하고?

감사

답변

2

나는 그 메타 검색 정말 상자 밖으로 제공하는 것을 생각하지 않습니다하지만 당신은 항상 속일 수 있습니다.

def index 
    @search = Article.search(params[:search].presence || {:id_lt => 0}) 
    @places = @search.all 
end 
+0

고맙습니다. 그것은 정확히 무엇을 찾고 있어요 –

1

제 생각에는 해결책이 충분합니다. 그것이하고있는 일에 대해 명확하고 데이터베이스에 불필요하게 액세스하지 않습니다. 그러나 코드를 다음과 같이 개선 할 수 있습니다.

def index 
    @search = Article.search(params[:search]) 
    @places = @search.search_attributes.values.all?(&:blank?) ? [] : @search.all 
end 

해시를 확인하는 것은 방법이 아닙니다. {'name_contains' => ''}과 같은 해시 (제출 된 양식이 비어 있으면 얻을 수 있음)는 false을 반환합니다.

@placesnil이 아닌 빈 배열로 설정하는 것이 좋습니다. 이렇게하면 nil을 확인할 필요가 없으며 루프가 계속 작동합니다.

+0

그래, 인스턴스 변수'@ places', 아니 및 매우 고마워요 개체를 설정하는 방법에 대해 매우 맞습니다! 정말이 도움을 주셔서 감사합니다)))) –

관련 문제