我在我的Rails应用程序中使用filterrifc gem将过滤器添加到索引列表中。我有一个用户表,该表以名字,姓氏和中间名为字段。我想做的是在单个搜索列中搜索所有这些列。我面临的问题是: 当我搜索 Jimmy 时,我会得到一个名字,姓氏和中间名的所有Jimmy列表。但是,当我尝试搜索特定的 Jimmy Wilson 时,它不起作用。它仍然只是显示Jimmys并非特定的 Jimmy Wilson 。请帮助我找到问题。
user.rb
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
)
}
答案 0 :(得分:1)
AND
的优先级高于OR
,因此您必须更改添加括号的位置:
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
)