现在我按照本文http://www.rymcmahon.com/articles/2
进行了尝试我的product.rb文件是
class Product < ActiveRecord::Base
def self.search(search)
where("name LIKE ?","%#{search}%")
end
end
我的索引文件是
<%= form_tag(products_path, :method => "get") do %>
<%= text_field_tag :search, params[:search], placeholder: "products" %>
<%= submit_tag "Search", :name => nil %>
<% end %>
我的索引方法是
def index
@product = Product.all
if params[:search]
@recipes = Product.search(params[:search]).order("created_at DESC")
else
@recipes =Product.all.order("created_at DESC")
end
end
但它没有过滤数据 我的输出是:
dinesh 200 2016-09-21 06:10:40 UTC
reddyc 300 2016-09-21 06:16:31 UTC
Goods 200 2016-09-21 09:33:56 UTC
答案 0 :(得分:1)
那篇文章似乎并不完全正确,因为第一个集合分配似乎是多余的。我这样写:
def index
@products = search_products.order(created_at: :desc)
end
private
def search_products
if params[:search]
Product.search(params[:search])
else
Product.all
end
end
然后在您的观看中,您使用@products
变量而不是@recipes
。它应该工作
答案 1 :(得分:0)
您为产品选择了两个不同的变量,并且不需要@product = Product.all
,因为您在if和else情况下再次获取产品变量。
def index
if params[:search].present?
@products = Product.search(params[:search]).order("created_at DESC") //I recommend taking plural(products)
else
@products = Product.all.order("created_at DESC")
end
end
您的 index.html.erb 可以是,
<% @products.each do |product| %>
<tr>
<td><%= product.field1 %></td>
<td><%= product.field2 %></td>
<td><%= product.field3 %></td>
</tr>
<% end %>
答案 2 :(得分:0)
我的控制器是:
def show
@product = Product.find(params[:id])
end
def search
end
def searchable
searchword = params[:search]
@data = Product.where(name: searchword)
end
我的searchable.html.erb是:
<h1>searching for '<%= params[:search] %>'</h1>
<% if @data.empty? %>
<h1>no results found</h1>
<% end %>
<% @data.each do |s| %>
<%= s.name %>
<%= s.created_at %><br>
<% end %>
和search.html.erb
<%= form_tag searchable_path, method: 'get' do %>
<%= text_field_tag :search, params[:search] %>
<%= submit_tag "Search", name: nil %>
<% end %>
我的路线被指定为
get 'search' => 'products#search'
get 'searchable' => 'products#searchable'
通过这个我能够在我的数据库中搜索数据。它工作正常。