Rails 3 - использование LIKE для поиска комбинированных 2 столбцов

Я следую ryan Простой способ поиска формы здесь: http://railscasts.com/episodes/37-simple-search-form

У меня есть следующая строка в моей модели пользователей:

find(:all, :conditions => ['fname LIKE ?', "%#{search}%"])

Но то, что я хотел бы сделать, - поиск через комбинацию 2 столбца: fname и lname

Когда пользователи ищут мои полные имена:

Пример, Джеймс Браун fname = James lname = Brown

Есть ли способ сделать это в Rails безопасно, что будет работать с такими базами данных, как SQLite, MySQL или Postgres (использует герою)?

Спасибо!

Ответ 1

Это может быть не очень красиво, но я использую это в моей модели Person:

scope :by_full_name lambda {|q| 
    where("first_name LIKE ? or last_name LIKE ? or concat(last_name, ', ', first_name) LIKE ?", "%#{q}%", "%#{q}%" , "%#{q}%")
}

Посмотрите на один из моих других сообщений немного больше, что позволит поисковому запросу быть необязательным.

Ответ 2

Это закончилось тем, что работала очень хорошо... Не уверен в производительности. Может ли индексы помочь в этом?

: conditions = > ['fname || lname LIKE? ', "% # {search}%" ]