2014-02-19 3 views
0

여러 가지 모델을 검색하려면이 솔루션을 생각해 냈습니다. 일부 보석을 피하려고합니다.여러 모델 사이에서 레일 3 검색

그러나 나열된 첫 번째 모델에 대해서만 작동하는 것 같습니다.

SearchController : 제 3 개 모델 내부

def index 
    @products = Product.search(params[:search]).paginate(:per_page => 5, :page => params[:page]) 
    @manufacturer_name = Manufacturer.search(params[:search]).paginate(:per_page => 5, :page => params[:page]) 
    @category_name = Category.search(params[:search]).paginate(:per_page => 5, :page => params[:page]) 
    end 

이 같은있다 : 나는 각 모델에 대한 준비

<%if @products.present?%> 
     <%= render partial: "products/found" %> 
    <%end%> 

    <%if @manufacturer_name.present?%> 
     <%= render partial: "products/foundmanufacturers" %> 
    <%end%> 

    <%if @category_name.present?%> 
     <%= render partial: "products/foundmanufacturers" %> 
    <%end%> 

검색 # 지수는 부분적으로 구분

def self.search(search) 
    if search 
     where('name LIKE ? ', "%#{search}%") 
    else 

    scoped 
    end 

.

하지만 이름을 검색 할 때 반드시 모든 카테고리에 있어야합니다. 그러나 제품 이름을 검색 할 때만 결과를 찾을 수 없습니다. 그럼 내가 원하는 결과를 얻는다.

팁이 유용 할 것입니다. TNX

+0

제품 또는 카테고리 이름에 이름이있는 제품을 검색 한 다음 제품을 반환합니까? – Amar

+0

@Amar 세 가지 모델에서이 검색을 사용할 수 있습니다. Prodcut, 카테고리, 제조업체. 이들 모두에는 필드 이름이 있습니다. 이러한 모든 시작을 하나의 검색 양식으로 검색하십시오. 이것을 확인하십시오 : http://darbs.ecotechno.lv/ "pez"을 입력하면 제품 이름이 반환되고 "CMI"는 제조업체 이름을 반환하지만 doesnt는 반환해야합니다. – Edgars

답변

1
단지로

scope :by_name,lambda{|name| where("name like (?)","%#{name}%") if name.present?} 
# In controller 
Product.by_name(params[:search]).paginate(:per_page => 5, :page => params[:page]) 

당신이 몇 가지 복잡한 확인을 수행하지 않는 범위를 쓰는 것이 낫다 모델 search 방법의 필요없이 아래 그림과 같은 이름의 범위를 만들 리팩토링 것

,

두 번째 시도는 볼 수 콘솔 웨더에서 검색 매개 변수를 기반으로 결과를 얻고 있습니까?

+0

Tnx, 첫 번째 라인은 모델에 추가해야합니까? – Edgars

+0

예 첫줄은 모델입니다. – Amar