2

어떻게 메타 검색의 검색 방법을 연결할 수 있습니까?chain meta_search results

@result = User.search(params[:search]).search(params[:filters]) 

우리는

User.active.male.where(age: 14..20) 

의 체인 메타 검색의 결과에 가능처럼 액티브에 체인 메서드를 호출 할 수 있습니다?

답변

3

나는 문제가있다. 같은 문제가 있다면, 다음과 같이 시도해 볼 수있다.

meta_search의 검색 방법은 MetaSearch::Search::ModelName을 반환합니다. 여기서 ModelName은 모델 이름입니다. Meta_search는이 개체에 대해 relation 메서드를 제공합니다. relation 메서드를 호출하여 ActiveRecord::Relation 개체를 가져온 다음 해당 개체에서 다시 검색 메서드를 호출 할 수 있습니다. 내가 정확히 무엇을 말하고 있는지 보려면 아래 코드를보십시오. 여기

@result = User.search(params[:search]) 
@search = @result.relation.search(params[:filters]) 

@result 그래서 우리는 ActiveRecord::Relation

@result.relation 

의 인스턴스를 얻을 수 relation 메서드를 호출 할 수 있습니다 그리고 우리는이 인스턴스에서 다시 검색 방법을 호출 할 수 있습니다 MetaSearch::Search::User의 인스턴스입니다. 즉

@result.relation.search(params[:filters]) 
2

하나의 검색에 대해이

@result = User.search params[:search].merge(params[:filters]) 
+0

그것은 한 번에 할 수없는 가서 무엇. params [: 검색] 키가 "user_notes_note_name_equals"입니다. params [: filters]에는 "user_notes_Note_name_equals"키가 있습니다. 두 값 모두 검색 할 값이 다릅니다. 그래서 우리가 병합한다면 두 키가 동일하기 때문에 가장 최근에 할당 된 값을 가진 하나의 키 "user_notes_note_name_equals"만있을 것입니다. 이전 값을 덮어 씁니다. –

+1

오 남자 그러면 검색 결과가 비어 있어야하며 항상 빈 결과를 반환합니다. 한 note_name은 두 개의 이름을 가질 수 있습니까? meta_search의 생성 된 쿼리는 "SELECT * 양식 사용자 (여기에 참여)와 같을 것입니다. user_notes.name = 'blah'WHERE user_notes.name = 'blah2'. 같은 이름의 두 개의 키가 주문에 사용 된 두 번째 키가 아니라고 확신합니까? – Naveed