2016-12-18 1 views
0

저는 회사에서 검색 할 수있는 검색 기능이 있으며 그 결과는 모든 회사의 이름과 관련 primary_categories에 맞는 회사입니다.Ransack을 사용하여 회사 및 관련 카테고리를 검색하기 위해 레일을 사용합니다.

나는 관련 회사를 움켜 잡기 위해 뭉치를 사용하고 있습니다.

회사 및 PrimaryCategories에는 has_many_and_belongs_to_many 연관이 있습니다. 반환 된 회사의 관련 기본 카테고리를 가져 오도록 코드를 리팩토링하고 있습니다.

변경 전의 방법은 다음과 같습니다.

def search 
    @q = Company.ransack(name_cont: params[:q][:name], keywords_name_cont: params[:q][:name], m: 'or') 
    @companies = @q.result.uniq 
    @q2 = PrimaryCategory.ransack(name_cont: params[:q][:name]) 
    @categories = @q2.result.uniq 
    @search_term = params[:q][:name] 
end 

검색 결과 페이지에서 회사를 검색 할 수 있지만 빈 배열 개체가 반환되므로 기본 범주는 비어 있습니다.

내가 배열 개체를 포함하는 위의 방법을 다시 작성했습니다

반환 회사에서 관련 primary_categories를 추출하는 깨끗한 방법을 찾고 있어요.

def search 
    @q = Company.ransack(name_cont: params[:q][:name], keywords_name_cont: params[:q][:name], m: 'or') 
    @companies = @q.result.uniq 
    @categories = [] 
    @search_categories = @companies.each {|co| @categories << co.primary_categories} 
    @categories.flatten!.uniq 
    @search_term = params[:q][:name] 
end 

이 작동하지만 나는 덩굴손을 사용하여 동일한 결과를 얻을 수 있는지 알고 싶습니다. 별도의 범주 배열을 작성하는 대신 롱락을 사용하여 연관된 오브젝트를 잡는 더 효율적인 방법이 있습니까?

+0

여기에 무엇을 얻으려고하는지 명확하지 않습니다. 동일한 검색 작업에서 두 ​​가지 유형의 모델을로드하려고합니까, 아니면 이름이나 카테고리로 검색하려고합니까? –

답변

0

이름을 기반으로 회사를로드하고 회사 카테고리를 포함하는 초기 질문에 ActiveRecord 옵션이 포함됩니다.

Company.includes(:primary_categories).ransack(...)

각 회사는로드의 primary_categories 열망해야합니다로드.