2

두 모델, 제품 및 제작자가 있습니다. 생산자는 많은 제품을 보유 할 수 있고 제품은 생산자에게 속할 수 있습니다. 지금과 같은 검색 쿼리에서 모든 레코드를 얻으려고 : product.name 또는 product.producer.name 검색 문자열과 같은 곳레일에 레코드 검색하기 belongs_to 또는 has_many 포함

@products = Product.where("name like ? OR product.producer.name like ?", "%#{params[:q]}%", "%#{params[:q]}%") 

는이 모든 제품을 반환해야합니다. 레일이 짧습니까?

Product.includes(:producer) 
     .where('products.name LIKE ? OR producers.name LIKE ?', "%#{params[:q]}%", "%#{params[:q]}%") 

당신은 그것으로 범위를 만들 수 있습니다 :

class Product < ActiveRecord::Base 

    scope :with_name_like, lambda { |name| 
      includes(:producer).where('products.name LIKE ? OR producers.name LIKE ?', "%#{name}%", "%#{name}%") 
    } 

을 그리고 다음과 같이 사용 :

+0

네, 그것은이다. 당신처럼 당신이 사용하고자하는 경우 전체 텍스트 검색에 대한 일부를 읽어보십시오. –

답변

4

당신은 다음과 같은 작업을 수행 할 수

@products = Product.with_name_like('Chair') 
+1

Jepp, 그 작품, 당신의 매우 빠른 지원을 위해 많이 감사드립니다! – kernification