2014-04-18 1 views
0

meta_search 보석을 사용하여 카탈로그에서 제품을 검색하고 있습니다. 그러나 검색 페이지를 처음 입력하거나 공백 값을 보내면 검색이 수행되고 모든 제품이 반환되고 나열됩니다.검색 입력 값을 확인하는 검색을 방지합니다

검색 입력의 값이 nil 또는 ""이 아닌지 확인하려고하지 않으므로 텍스트 필드에 실제로 무엇인가가 입력되었을 때만 검색이 수행됩니다.

이 내 search.html.erb 파일입니다

<%= render :partial => 'search_box' %> 
<% if @products %> 
    <p>The search "<%= params[:search][:name_contains] %>" returned <%= pluralize @products.size, "result" %>:</p> 
    <%= render(:partial => "products") %> 
<% end %> 

_search_box.html.erb :

<%= form_for @search, :url => "/catalog/search", :html => {:method => :get} do |f| %> 
    <%= f.label :Name %> 
    <%= f.text_field :name_contains %> 
    <%= f.submit 'Search' %> 
<% end %> 

CatalogControllersearch 방법 : 나는 /catalog/search를 탐색 할 때

def search 
    if params[:search] 
     @search = Product.search(params[:search]) 
     @products = @search.all 
     unless @products.size > 0 
     flash.now[:notice] = "No results" 
     end 
    end 
    end 

나는 다음과 같은 얻을 오류 :

NoMethodError in Catalog#search 

Showing /*****/app/views/catalog/_search_box.html.erb where line #1 raised: 

undefined method `model_name' for NilClass:Class 

Extracted source (around line #1): 

1: <%= form_for @search, :url => "/catalog/search", :html => {:method => :get} do |f| %> 
2: <%= f.label :Nombre %> 
3: <%= f.text_field :name_contains %> 
4: <%= f.submit 'Search' %> 
+0

를 찾을 수 이런 식으로 생각합니다. 왜 여기서 form_for를 사용하고 있습니까? 그냥 form_tag를 사용하면 – LHH

+0

거기에 할 수있는 몇 가지 방법이 있습니다 : http://stackoverflow.com/questions/5827910/how-to-set-a-0-result-in-meta-search-before-user -pressing-a-search-button –

답변

1

이 시도하고 난 당신 PARAMS이 전무하다 다음 @search 빈 검색 할 때 때문에 @search 항상

def search 
    @search = Product.search(params[:search]) 
    if params[:search] 
    @products = @search.all 
    flash.now[:notice] = "No results" unless @products.size > 0 
    end 
end 
+0

'meta_search' 보석은 필드의 이름으로 작동합니다. 'form_for'가 필요합니다. 그래서'search'에 해쉬를 만듭니다. – dabadaba

+0

params 검색이 비어 있다면 여기에서 한가지 할 수 있습니다. 그러면 @search = Product.new와 같은 Product 모델을 간단히 초기화 할 수 있습니다. 이게 작동해야한다. – LHH

+0

어디에서해야합니까? 컨트롤러에? – dabadaba

관련 문제