Rails 3 - Использование LIKE для поиска в комбинированных 2 столбцах - PullRequest
11 голосов
/ 16 октября 2010

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

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

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

Но то, что я хотел бы сделать, это поиск по комбайну в 2 столбца: fname & lname

Поскольку пользователи ищут мои полные имена:

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

Есть ли способ безопасно сделать это в Rails, который будет работать в таких БД, как SQLite, MySQL или Postgres (использует heroku)?

Спасибо!

Ответы [ 2 ]

14 голосов
/ 16 октября 2010

Это может быть не красиво, но я использую это в моей модели 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}%")
}

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

0 голосов
/ 18 октября 2010

В итоге все получилось очень хорошо ... Хотя не уверен насчет производительности. Могут ли индексы помочь?

: условия => ['fname || lname LIKE? ', "% # {search}%"]

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