我在rails中有一个非常简单,典型的搜索表单。输入一个字符串,如果有任何字符串匹配,它会检查该模型的列。几个星期前它工作得很好。我今天回来了,突然间不起作用。
这是我的代码。我的搜索表单:
<%= 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
在控制器代码中,puts“术语是#{term}每次打印正确的术语。所以我知道这是正确的选择。只是,当我搜索某些东西时,它不会返回正确的结果。这是我终端的截图:
在终端中的“Lesrésultatssont”意味着“结果是......”然后是空的,因为它什么都不返回。这可能有什么问题?答案 0 :(得分:1)
为什么不执行降低(?)和search_term.downcase以确保其不区分大小写?
答案 1 :(得分:1)
您的代码目前正在搜索LIKE '%term'
(字符串必须以字词结尾)
您可能需要搜索LIKE '%term%'
(字符串必须包含术语)
只需添加%:
where("name LIKE ?", "%#{search_term}%")