2015-10-16 66 views
1

我想爲Sinatra上的簡單產品庫存應用程序提供基本的搜索功能,但不知道如何使控制器和視圖正確輸出所有具有類似名稱的產品到結果頁面。在Ruby中的基本搜索Sinatra ActiveRecord

SearchPage.erb:

<form action="/search", method="post"> <input type="text" name="product[name]">

控制器:

post '/search' do 
@Products = Product.find_by(name: params[:product][:name]) 
@Products = Product.all(:name.like => "%#{params[:name]}%") #found this on another question 
erb :"result" 
end 

Result.erb

<% @Products.each do |product| %> 
<%=product.name %> 
<%=product.details %> 

編輯:我是能夠使搜索工作BA根據以下代碼建議。謝謝!:

Search.erb查看

<form action="/search", method="get"> 
<input type="text" name="search"> 

控制器

get '/search' do 
@products = Product.all 
if params[:search] 
    @products = Product.search(params[:search]) 
else 
    @products = Product.all 
end 
erb :'results' 
end 

型號

class Product < ActiveRecord::Base 
def self.search(search) 
where("name like ?", "%#{search}%") 
end 

Results.erb查看

<% if @products.present? %> 
<table> 
<td>Product Name</td><td>Company</td> 
<% @products.each do |product| %> 
<tr><td><a href="/products/<%= product.id %>"><%=h product.name %></a> </td> 
<td><%=h product.company.name %></td> 
<% end %> 
<% else %> 
<p>There are no Products containing the term(s) <%= params[:search] %>.</p> 
<% end %> 
</table> 

回答

3

我注意到你正在使用POST方法的蝙蝠。有一種更簡單的方法可以爲您的產品創建搜索功能。試試這個:

帖子控制器:

@products = Product.all 
    if params[:search] 
    @products = Product.search(params[:search]).order("created_at DESC") 
    else 
    @products = Product.all.order('created_at DESC') 
    end 
end 

帖子型號(注:如果您使用的SQLite保持這就像如果你使用的是Postgres,改變喜歡ILIKE。)

def self.search(search) 
    where('name like :pat or content like :pat', :pat => "%#{search}%") 
end 

搜索表單(放入你的Result.erb並根據需要編輯,但保留爲get方法,我個人喜歡使用表單助手,但如果你願意,可以創建一個正常表單)

<%= form_tag(products_path, :method => "get", id: "search-form") do %> 
<%= text_field_tag :search, params[:search], placeholder: "Search Posts" %> 
<%= submit_tag "Search" %> 
<% end %> 

渲染結果

<% if @products.present? %> 
    <%= render @products %> 
<% else %> 
    <p>There are no posts containing the term(s) <%= params[:search] %>.</p> 
<% end %> 

讓我知道這對你的作品。如果沒有,我會嘗試更多的幫助。

+0

Woops你說得對。我的錯。我會編輯 – luke

+0

謝謝!我用每個做結果頁面,而不是渲染和更新代碼 –