1
[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模型。什么可能导致这种行为?

4

2 回答 2

5

您还没有指定顺序 - 数据库可以自由地以它想要的任何方式对结果进行排序。它可能是主键顺序,也可能是磁盘上的排列方式,但如果没有顺序子句,则无法保证。

如果您想要特定顺序的第一条记录,请确保您要求它

于 2012-01-30T08:05:16.007 回答
1

User.first与 相同User.all.first,没有指定顺序,因此 DB 以任意顺序返回元素列表。如果要获取 id 最小的用户,请使用User.order("id").first.

如果您的请求返回多个元素并且您想选择其中任何一个,您可能希望first不指定顺序使用。

于 2012-01-30T08:16:20.220 回答