设计搜索栏并从数据库rails4中检索数据

时间:2016-09-21 12:28:19

标签: ruby-on-rails forms

现在我按照本文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

3 个答案:

答案 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'

通过这个我能够在我的数据库中搜索数据。它工作正常。