我的表用户看起来像这样
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。
答案 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
变成蛇形,这就是铁轨的惯例。