[1] pry(main)> User.first
User Load (0.4ms) SELECT "users".* FROM "users" LIMIT 1
=> #<User id: 3, email: "chasity@kiehn.net", encrypted_password: "$2a$10$lqsgKvQuz9iSIu/..FMRJu76H9KNhfVz5x9DmxphC0TK...", reset_password_token: ... >
[2] pry(main)> User.find(1)
User Load (12.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 1]]
=> #<User id: 1, email: "admin@example.com", encrypted_password: "$2a$10$pGDcv0/EgiDk4KcZN9pli.evx5Ni1qOoujQD15HgWH8Y...", reset_password_token: ... >
[3] pry(main)> Product.first
Product Load (0.6ms) SELECT "products".* FROM "products" LIMIT 1
=> #<Product id: 1, name: "Ruby on Rails Jr. Spaghetti", created_at: "2012-01-25 10:13:26", updated_at: "2012-01-25 10:13:26", properties: ...>
这在控制台和运行时期间发生,仅适用于User
模型。什么可能导致这种行为?
答案 0 :(得分:5)
您尚未指定订单 - 数据库可以以任何方式自由订购结果。它可能是主要的关键顺序,它可能是如何在光盘上布局,但没有订单条款就没有保证。
如果您想要特定订单中的第一条记录,请确保您要求它
答案 1 :(得分:1)
User.first
与User.all.first
相同,没有指定的顺序,因此DB以任何顺序返回元素列表。如果您想获得ID最小的用户,请使用User.order("id").first
。
如果您的请求返回了多个元素并且您想要选择其中任何一个元素,那么您可能希望在没有指定顺序的情况下使用first
。