Rails简单搜索查询

时间:2015-01-28 00:02:03

标签: ruby-on-rails ruby sqlite

我的表用户看起来像这样

Name      |   SecondName
-------------------------
"David"   |  "Graham"
-------------------------
"Gary"    | "Jules"
-------------------------
"Gary"    | "Lincon"

我在我的模型中尝试使用此功能

def nameSearch(search)
 where('name like ? OR secondName like ?', "%#{search}%", "%#{search}%")
end

我的功能适用于:

User.nameSearch("Gary")返回2条记录

User.nameSearch ("ary")返回2条记录

如何进行此搜索?

User.nameSearch("Gary Jules") returns nil

它应该返回2条记录而不是nil。

2 个答案:

答案 0 :(得分:2)

您可以在空格上拆分字符串以获取数组,添加%通配符然后使用此数组进行查询,例如:

def name_search(search)
    search_terms = search.split(" ")
    search_terms_with_wildcard = search_terms.map {|val| "%#{val}%" }
    Product.where("name LIKE ANY ( array[?] ) OR secondName LIKE ANY ( array[?] )", search_terms_with_wildcard, search_terms_with_wildcard)
end

答案 1 :(得分:0)

如果您尝试使用2参数方法,我不确定为什么它会返回确切的搜索,它应该可以解决您的问题。

def name_search(first, last)
  where("name like ? OR second_name like ?", "%#{first}%", "%#{last}%")
end

顺便说一句,将你的method name变成蛇形,这就是铁轨的惯例。