我试图使一个简单的产品库存应用程序在Sinatra的基本搜索功能,但不知道如何使控制器和视图正确输出的所有产品具有类似的名称到结果页面.
SearchPage.erb:
第一个月
控制器:
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 %>
型
编辑:我能够根据以下代码的建议进行搜索工作。谢谢!:
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>
型
1条答案
按热度按时间zvokhttg1#
我注意到你使用的是POST方法。有一种更简单的方法可以为你的产品创建搜索功能。试试这个:
员额管制员:
字符串
Posts Model(注意:如果你使用的是SQLite,请保持为LIKE。如果你使用的是Postgres,请将LIKE更改为ILIKE)
型
搜索表单(放入Result.erb并根据需要编辑,但保留为get方法。我个人喜欢使用表单助手,但如果你愿意,你可以创建一个普通表单)
型
渲染结果
型
让我知道如果这对你有用。如果不,我会尝试帮助更多。