Rails, как мне искать в первой и второй части строки в базе данных?

Для своего приложения я хочу создать форму поиска, которая возвращает название улиц. Но когда я использую where('street like ?', 'wall'), он возвращает только: «Уоллстрит», а не, например: «Второй Уоллстрит, Уоллстрит».

Я также хочу вернуть «Second Wallstreet, The Wallstreet», но не название улицы с «Notwallstreet», где «Wall» находится где-то посередине.

Я использовал «обыск драгоценных камней», но нашел только опцию «содержит». И это также вернет «Нотуоллстрит».


person Bart Hoekstra    schedule 24.10.2015    source источник


Ответы (2)


Вам нужно поставить % с обеих сторон вашего слова для поиска префикса/инфикса/постфикса

where('street like ?', '%wall%')

PS:

Насколько вам не нужен инфикс:

where('street like ? or ?', '%wall', 'wall%')

И вот с чем следует быть осторожным. Если у вас есть индекс в поле street, постфикс не будет его использовать (а префикс будет)

person fl00r    schedule 24.10.2015
comment
Спасибо за ответ. - person Bart Hoekstra; 24.10.2015
comment
@BartHoekstra о, я вижу, тебе не нужно инфиксное совпадение. я отредактировал ответ - person fl00r; 24.10.2015

Если вы используете postgres, вы можете использовать ПОДОБНО, как описано здесь.

where('street similar to ?', '[[:<:]]Wall')
person davidrac    schedule 24.10.2015