2016-03-05 47 views
0

我有一个非常简单,典型的轨道搜索表单。输入一个字符串,如果有任何字符串匹配它,它将检查该模型的列。几周前它工作得很好。我今天回来,突然不起作用。简单的轨道搜索表单不工作

这是我的代码。我的搜索形式:

<%= form_tag("/search/products", method: "get") do %> 
    <%= label_tag(:q, "Search for:") %> 
    <%= text_field_tag(:q) %> 
    <%= submit_tag("Search") %> 
<% end %> 

我的控制器:

def search 
term = params[:q] 
puts "the term is #{term}" 
@resultats = Product.search_products(term) 
end 

在我的模型中,search_products方法:

def self.search_products(search_term) 
    if search_term == "" 
     return [] 
    else 
     where("name LIKE ?", "%#{search_term}") 
    end 
    end 
在控制器代码

,看跌期权“一词是#{项}每次都打印正确的术语,所以我知道正确的拾取正确,只是当我搜索某些东西时,它不会返回正确的结果,下面是我的终端的屏幕截图:

enter image description here

“莱斯résultatsSONT”在终端的意思是“结果是......”,然后空的,因为它没有返回。这里有什么可能是错的?

+1

你确定你确实有记录以'second'结尾(区分大小写!)如果您希望能够搜索单词的开头并且不区分大小写,则应该将您的查询改为'where(“name ILIKE?”,“%# {search_term}%“)' – panmari

+1

另外,由于它是直接从互联网上检索的参数,因此您应该使用[sanitize_sql_like](http://edgeapi.rubyonrails.org/classes/ActiveRecord/Sanitization/ClassMethods.html#方法-i-sanitize_sql_like) – panmari

+0

哦,也许这是问题所在。我有记录,开始与“秒”,但没有结束与第二。我会创建一些新记录,看看它是否在背后 – joey

回答

1

你的代码当前搜索LIKE '%term'(字符串必须在期末)

你可能需要有它搜索LIKE '%term%'(字符串必须包含的术语)

只需添加一个%:

where("name LIKE ?", "%#{search_term}%") 
1

你为什么不这样做低(?)和search_term.downcase,以确保其不区分大小写