2016-06-24 106 views
0

我一直在爲這個搜索表單尋找我正在構建的用於學習Rails的應用程序。搜索與所有產品一樣顯示搜索結果Rails應用程序

它應該搜索產品,但是當我在搜索字段中輸入一些產品名稱時,它會給我一個所有產品的列表。解決方案可能很簡單,但我還沒有弄明白,我感到非常沮喪。

我試圖將@products更改爲不同的名稱,但沒有奏效。

有人可以檢查一下,並建議我嗎?

在此先感謝 d

在我_navbar代碼

<%= form_tag search_products_path, class: 'navbar-form navbar-right' do %> 
    <%= search_field_tag class: 'form-control', :id => 'searchbar', :placeholder =>'Search', :name => "query" %> 
    <%= submit_tag "Submit", class: 'btn btn-default', :name => nil %> 
<% end %> 

在我的意見/產品/ search.html.erb

<table class="table table-hover"> 
    <thead> 
    <tr> 
     <th>Name</th> 
     <th>Description</th> 
     <th>Designer</th> 
     <th>Price</th> 
     <th>Stock</th> 
     <th>Image</th> 

    </tr> 
    </thead> 

<tbody> 
    <% @products.each do |product| %> 

    <tr> 
    <td><%= link_to product.name, product %></td> 
    <td><%= product.description %></td> 
    <td><%= product.designer.designer_name %></td> 

    <td><%= number_to_currency product.price %></td> 
    <td><%= product.stock_quantity %></td> 

    <td><%= image_tag product.image.thumb %></td> 


<% end %> 
</tr> 
</tbody> 

在我product.rb模型我有這個代碼

class Product < ActiveRecord::Base 


    mount_uploader :image, ImageUploader 

    validates_presence_of :name, :price, :stock_quantity 
    validates_numericality_of :price, :stock_quantity 

    belongs_to :designer 
    belongs_to :category 
    belongs_to :page 

    def self.search(query) 
     where("name LIKE ? OR description LIKE ?", "%#{query}%", "%#{query}%") 
    end 


    end 

在products_controller.rb我有這樣的代碼

def search 
    @products = Product.search(params[:query]) 
    @categories = Category.joins(:products).where(:products => {:id => @products.map{|x| x.id }}).distinct 

end 

回答

0

,而不是使用

@q = "%#{params[:query]}%" 
@products = Product.where("name ILIKE ? or description ILIKE ?", @q, @q) 

使用

@products = Product.search(params[:query]) 

在模型的代碼更改爲

"name LIKE ? OR description LIKE ?", "%#{query}%", "%#{query}%" 
+0

感謝答案, 當我更改代碼軌道給我這個錯誤'綁定變量的錯誤數量(1爲2):名稱像?或描述如''在這行'def self.search(query) where(「name like?or description like?」,「%#{query}%」) end' – DaudiHell

+0

語法錯誤,而不是兩個你正在使用一個單一的變量我已經更新了答案。 –

+0

謝謝,它現在有效,但它仍然給我的所有產品的清單,而不是我所搜索的, – DaudiHell