0

我试图找出正确的方法来做到这一点。这个想法是学习/理解如何使用部分信息进行搜索。就像我在 500 个用户名中搜索所有将“测试”作为用户名一部分的用户名一样。(例如“测试相同”、“Ron 测试”等)

对于以下我在控制台测试查找数据的方法。User.all 返回所有用户的所有数据。我想返回用户名包含“Test”的用户的所有数据。

所以我在控制台中做了以下

User.all

返回一个包含所有用户和相关信息的键/值对的数组。2 用户的用户名包含“Test”作为用户名的一部分。所以我试图像这样返回这两个用户:

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

控制台中的该命令不走运。它返回的所有内容如下:

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

以防万一,我正在使用 ruby​​ 1.9.3 和 ramaze,但我认为答案仍然适用于使用 rails。

4

2 回答 2

2

我想你快到了。Sequel返回一个DataSet可以链接到进一步选择、投影、连接等的 a。这将建立更多的 SQL,因此它还没有命中数据库。如果您想使用当前查询去那里,您可以简单地调用.all.first在其上获取实际调用的结果。要获取数组,您只需将两个调用链接起来,如下所示

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

真的就是这么简单。

于 2014-06-21T02:10:18.583 回答
0

在控制台中试试这个......

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

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

...我想你会感到惊喜。在您尝试访问记录之前,不会执行续集。

于 2014-06-21T02:11:14.477 回答