Ruby on rails Rails简单搜索查询

Ruby on rails Rails简单搜索查询,ruby-on-rails,ruby,sqlite,Ruby On Rails,Ruby,Sqlite,我的表用户看起来像这样 Name | SecondName ------------------------- "David" | "Graham" ------------------------- "Gary" | "Jules" ------------------------- "Gary" | "Lincon" 我尝试在我的模型中使用这个函数 def nameSearch(search) where('name like ? OR secondNam

我的表用户看起来像这样

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条记录,而不是零。

您可以拆分空间中的字符串以获得一个数组,添加%通配符,然后使用此数组进行查询,类似于:

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

我不知道为什么它会返回精确的搜索如果你尝试了一个2参数的方法,它会真正解决你的问题

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

顺便说一下,将您的
方法名
设置为snake大小写,这是rails的惯例。

将搜索变量标记为两个标记。@trueinViso我可以定义一个接受两个参数的函数,但它只返回精确的搜索(1条记录)。相反,我想返回所有记录。在我的示例中,我正在搜索的结果将返回2条记录。您好,这是一个很好的建议,但它给我带来了一个错误:
SQLite3::SQLException:near“['%Gary%','%Jules%]””
可能是slqlite3的问题。我应该使用postgresql吗?出于某种原因,我的大脑没有在sqlite3中思考这个问题。我的错。如果可以的话,我会在下班后为你重写这篇文章。稍后再查看。