#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, поскольку это то, что я пытался сделать. Мне просто не хватало . вся цепочка в конце.