2014-10-22 4 views
1

지금은 레스토랑, 카테고리 및 항목의 세 가지 모델이 있습니다. 이 테이블에는 모두 name 속성이 있습니다. 3 번 모두에 액세스 할 수있는 메인 페이지에서 검색을 설정하고 싶습니다. 검색을 수행 할 때 레스토랑 이름, 카테고리 이름 및/또는 항목 이름이 검색 결과로 나타납니다.여러 모델에 pg_search 사용

레일 4 앱에서 pg_search를 사용하고 있습니다. https://github.com/Casecommons/pg_search

지금까지 보석을 번들로 묶어 다중 검색을 설정하고 이전을 실행했습니다. 다음과 같이 내 모델은 현재보고 : 정보 검색

<%= form_tag restaurants_path, method: :get do %> 
    <%= text_field_tag :query, params[:query], class: "search-box" %> 
    <%= submit_tag "Search", name: nil, class: "btn btn-search" %> 
<% end %> 

레스토랑 컨트롤러와

모형

class Restaurant < ActiveRecord::Base 
    has_many :items 

    validates :name, presence: true 
    validates :gg, presence: true 

    include PgSearch 
    multisearchable against: :name 

end 

class Category < ActiveRecord::Base 
    has_many :items 

    validates :name, presence: true 
    validates :gg, presence: true 

    include PgSearch 
    multisearchable against: :name 

end 

class Item < ActiveRecord::Base 
    belongs_to :restaurants 
    belongs_to :categories 

    validates :name, presence: true 
    validates :gg, presence: true 

    include PgSearch 
    multisearchable against: :name 

end 

VIEW

class RestaurantsController < ApplicationController 

    def index 
    @restaurants = PgSearch.multisearch(params[:q]) 
    end 

end 

질문

  • 컨트롤러가 멀티 검색 항목을 제대로 되돌려 놓고 있지 않습니다. 이것을 정확하게 쓰려면 어떻게해야합니까?
  • 하나의보기에서 3 개의 검색 결과를 모두 구현하려는 경우 새 컨트롤러를 설정하거나 범주 및 항목을 레스토랑 컨트롤러에 추가해야합니까?
  • 좋은 사례를 보내주십시오.

답변

2

마이그레이션을 실행할 때 pg_search_documents라는 새 테이블을 만듭니다. 이것이 pg_search가 조회 할 테이블입니다.

대부분 해당 테이블에 데이터가없는 문제가 있습니다. 문서에 "이 모델에 이미 기존 레코드가있는 경우이 모델을 다시 인덱싱하여 pg_search_documents 테이블에 기존 레코드를 가져와야합니다. 아래의 재구성 작업을 참조하십시오."

문서의이 섹션을 참조하십시오. https://github.com/Casecommons/pg_search#rebuilding-search-documents-for-a-given-class