Найти два столбца вместе в одном столбце поиска - PullRequest
0 голосов
/ 21 мая 2019

Я использую filterrifc gem в своем приложении rails для добавления фильтров в список индексов. У меня есть таблица пользователей с полями namename, фамилия и middlename.То, что я пытаюсь сделать, это поиск по всем этим столбцам в одном столбце поиска.Проблема, с которой я сталкиваюсь: когда я ищу Jimmy , я получаю список всех Jimmys по имени, фамилии и отчеству.Но когда я пытаюсь найти конкретный Джимми Уилсон , он не работает.Это просто показывает, что Джиммис не конкретный Джимми Уилсон .Пожалуйста, помогите мне найти проблему.

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 Ответ

1 голос
/ 21 мая 2019

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
)
...