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}%" ]