我正在尝试找出正确的方法来做到这一点。这个想法是学习/理解如何使用部分信息进行搜索。就像我正在搜索 500 个用户名中所有包含“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,并且 ramaz,但我认为答案仍然适用于使用 Rails。
我想你已经快到了。
Sequel
返回一个DataSet
,可以链接到进一步的选择、投影、连接等。这将构建更多的SQL,因此它还没有到达数据库。如果您想使用当前查询转到那里,您只需调用 .all
或 .first
即可获取实际调用的结果。要获取数组,您只需将两个调用链接起来即可,如下所示
User.where("username LIKE ?", "%Test%").all
其实就是这么简单。
在控制台中尝试这个...
selected_users = User.where("username LIKE ?", "%Test%")
selected_users.each{|u| p u.username}
...我想你会感到惊喜。在您尝试访问记录之前,不会执行续集。