在一个搜索列中一起搜索两列

时间:2019-05-21 17:38:18

标签: ruby-on-rails ruby filterrific

我在我的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
    )
  } 

1 个答案:

答案 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
)