更好的搜索查询两列forename和name

实际上我有来自MrJoshi的这个搜索查询这里是相关的问题: 搜索查询(名称或名称)和(名称forname)和(forname名称)

def self.search(query) return where('FALSE') if query.blank? conditions = [] search_columns = [ :forname, :name ] query.split(' ').each do |word| search_columns.each do |column| conditions << " lower(#{column}) LIKE lower(#{sanitize("%#{word}%")}) " end end conditions = conditions.join('OR') self.where(conditions) end 

此搜索查询的问题在于它返回多条记录的方式。 例如,如果某人正在搜索John Smith此搜索查询将返回所有带有name Smith forename John记录和所有name Smith记录,尽管只有一个人与搜索查询完全匹配,因此name is Smith and forename is John所以我更改了代码一点点:

 def self.search(query) return where('FALSE') if query.blank? conditions = [] query2 = query.split(' ') if query2.length == 2 conditions << " lower(:forname) AND lower(:name) LIKE ?', lower(#{sanitize("%#{query2.first}%")}) , lower(#{sanitize("%#{query2.last}%")})" conditions << " lower(:forname) AND lower(:name) LIKE ?', lower(#{sanitize("%#{query2.last}%")}) , lower(#{sanitize("%#{query2.first}%")})" else search_columns = [ :forname, :name ] query2.each do |word| search_columns.each do |column| conditions << " lower(#{column}) LIKE lower(#{sanitize("%#{word}%")}) " end end end conditions = conditions.join('OR') self.where(conditions) end 

但现在我收到这个错误:

 SQLite3::SQLException: near "', lower('": syntax error: SELECT "patients".* FROM "patients" WHERE ( lower(:forname) AND lower(:name) LIKE ?', lower('%John%') , lower('%Smith%')OR lower(:forname) AND lower(:name) LIKE ?', lower('%Smith%') , lower('%John%')) LIMIT 12 OFFSET 0 

我错了什么? 谢谢!