Ruby on rails 在单个搜索列中同时搜索两列
我在我的rails应用程序中使用FilterRig gem向索引列表添加过滤器。我有一个用户表,字段为firstname、lastname和middlename。我试图做的是在单个搜索列中搜索所有这些列。我面临的问题是: 当我搜索Jimmy时,我会得到所有Jimmy的名字、姓氏和中间名列表。但是当我尝试搜索特定的吉米·威尔逊时,它不起作用。它仍然只是显示Jimmys而不是特定的Jimmy Wilson。请帮我找到问题所在 user.rbRuby on rails 在单个搜索列中同时搜索两列,ruby-on-rails,ruby,filterrific,Ruby On Rails,Ruby,Filterrific,我在我的rails应用程序中使用FilterRig gem向索引列表添加过滤器。我有一个用户表,字段为firstname、lastname和middlename。我试图做的是在单个搜索列中搜索所有这些列。我面临的问题是: 当我搜索Jimmy时,我会得到所有Jimmy的名字、姓氏和中间名列表。但是当我尝试搜索特定的吉米·威尔逊时,它不起作用。它仍然只是显示Jimmys而不是特定的Jimmy Wilson。请帮我找到问题所在 user.rb scope :search_name, lambda {
scope :search_name, lambda { |query|
return nil if query.blank?
terms = query.downcase.split(/\s+/)
terms = terms.map { |e|
('%' + e + '%').gsub(/%+/, '%')
}
num_or_conds = 3
where(
terms.map { |term|
"(LOWER(users.lastname) LIKE ?) OR (LOWER(users.firstname) LIKE ?) OR (LOWER(users.middlename) LIKE ?)"
}.join(' AND '),
*terms.map { |e| [e] * num_or_conds }.flatten
)
}
和
的优先级高于或
,因此您必须更改添加括号的位置:
where(
terms.map { |term|
"(LOWER(users.lastname) LIKE ? OR LOWER(users.firstname) LIKE ? OR LOWER(users.middlename) LIKE ?)"
}.join(' AND '),
*terms.map { |e| [e] * num_or_conds }.flatten
)