2016-03-05 84 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,以確保其不區分大小寫