Как сделать запрос LIKE в Arel и Rails?

Я хочу сделать что-то вроде:

SELECT * FROM USER WHERE NAME LIKE '%Smith%'; 

Моя попытка в Ареле:

 # params[:query] = 'Smith' User.where("name like '%?%'", params[:query]).to_sql 

Однако это становится:

 SELECT * FROM USER WHERE NAME LIKE '%'Smith'%'; 

Arel корректно завершает строку запроса «Смит», но поскольку это оператор LIKE, он не работает.

Как сделать запрос LIKE в Arel?

PS Bonus – я действительно пытаюсь отсканировать два поля в таблице, как имя, так и описание, чтобы увидеть, есть ли какие-либо совпадения с запросом. Как это будет работать?

Вот как вы выполняете подобный запрос в isl:

 users = User.arel_table User.where(users[:name].matches("%#{user_name}%")) 

PS:

 users = User.arel_table query_string = "%#{params[query]}%" param_matches_string = ->(param){ users[param].matches(query_string) } User.where(param_matches_string.(:name)\ .or(param_matches_string.(:description))) 

Пытаться

 User.where("name like ?", "%#{params[:query]}%").to_sql 

PS.

 q = "%#{params[:query]}%" User.where("name like ? or description like ?", q, q).to_sql 

Aaand это было долгое время, но @ cgg5207 добавил модификацию (в основном полезную, если вы собираетесь искать долгосрочные или множественные длинные имена или вы слишком ленивы для ввода)

 q = "%#{params[:query]}%" User.where("name like :q or description like :q", :q => q).to_sql 

или

 User.where("name like :q or description like :q", :q => "%#{params[:query]}%").to_sql 

Ответ Reuben Mallaby может быть сокращен далее, чтобы использовать привязки параметров:

 User.where("name like :kw or description like :kw", :kw=>"%#{params[:query]}%").to_sql 
  • rails датируются с json
  • OpenSSL :: SSL :: SSLError на Heroku
  • Rails 3 devise, current_user недоступен в модели?
  • чертеж / screen.css не предварительно скомпилирован
  • Как вы используете POST для URL-адреса в Capybara?
  • Как обрабатывать слишком длинные имена индексов в миграции Ruby on Rails ActiveRecord?
  • Как получить доступ к переменным экземпляра в движке CoffeeScript внутри шаблона Slim
  • Rails: Как связать запросы объема с OR вместо AND?
  • Не удалось получить стабильное соединение firefox за 60 секунд (127.0.0.1:7055)
  • Давайте будем гением компьютера.