консольный пользователь.где («НРАВИТСЯ имя пользователя?», «%Test%»)

#ruby #sqlite #sequel #ramaze

#ruby #sqlite #продолжение #ramaze

Вопрос:

Я пытаюсь найти правильный способ сделать это. Идея состоит в том, чтобы узнать / понять, как выполнять поиск с частичной информацией. Например, если я ищу 500 имен пользователей для всех, у которых есть «Test» как часть имени пользователя. (примеры «Test Same», «Ron Test» и т. Д.)

Для следующего я в консоли тестирую способы поиска данных. User.all возвращает все данные для всех пользователей. Я хочу вернуть все данные для пользователей, имя пользователя которых включает «Test».

Итак, я сделал следующее в консоли

 User.all
 

возвращает массив с парами ключ / значение всех пользователей и связанной с ними информацией. У 2 пользователей было имя пользователя, в котором было «Test» как часть имени пользователя. Итак, я попытался вернуть только этих 2 пользователей, подобных этому:

 User.where("username LIKE ?", "%Test%")
 

Не повезло с этой командой в консоли. Все, что он возвращает, это следующее:

 #<Sequel::SQLite::Dataset: "SELECT * FROM `users` WHERE (username LIKE '%Test%')">
 

На всякий случай, если это имеет значение, я использую ruby 1.9.3 и ramaze, но я думаю, что ответы все равно будут применяться с использованием rails.

Ответ №1:

Я думаю, вы почти на месте. Sequel возвращает a DataSet , который может быть привязан к дальнейшему выбору, проектированию, объединению и т. Д. Это привело бы к увеличению объема SQL, поэтому он еще не попал в базу данных. Если вы хотите перейти туда с текущим запросом, вы можете просто вызвать .all или .first на нем, чтобы получить результат фактического вызова. Чтобы получить массив, вы просто соединяете свои два вызова, как в

 User.where("username LIKE ?", "%Test%").all
 

Это действительно так просто.

Ответ №2:

Попробуйте это в консоли…

 selected_users = User.where("username LIKE ?", "%Test%")

selected_users.each{|u| p u.username}
 

… и я думаю, вы будете приятно удивлены. Продолжение не выполняется, пока вы не попытаетесь получить доступ к записям.

Комментарии:

1. Спасибо за ваш ответ. Я пошел с приведенным выше от @Patru, поскольку это то, что я пытался сделать. Мне просто не хватало . вся цепочка в конце.