Как бы я изменил этот запрос активной записи, чтобы сначала проверить точное совпадение? - PullRequest
0 голосов
/ 26 октября 2011
def self.search(search)
  if search
    find(:all, :conditions => ['name LIKE ?', "%#{search}%"])
  end
end

Как бы я изменил эту функцию, чтобы она сначала проверяла, есть ли точное соответствие для параметра search в поле name, и, если есть точное совпадение, возвращает это совпадение вместорезультат запроса LIKE ??

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Вы можете попробовать следующее, хотя потенциально это может занять два запроса:

result = where("name = #{search}")
result.empty? ? where("name LIKE %#{search}%") : result
0 голосов
/ 26 октября 2011
def self.search(search)
     if search
          results = find(:all, :conditions => ['name LIKE ?', "#{search}"])
          results = find(:all, :conditions => ['name LIKE ?', "%#{search}%"]) if results.empty?
     end
end

Для сложных поисков я бы предложил использовать двигатель seatrch вроде sphinx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...