ActiveRecord :: Querying #first返回集合的第三个成员

时间:2012-01-30 07:56:28

标签: ruby-on-rails activerecord ruby-on-rails-3.2

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

2 个答案:

答案 0 :(得分:5)

您尚未指定订单 - 数据库可以以任何方式自由订购结果。它可能是主要的关键顺序,它可能是如何在光盘上布局,但没有订单条款就没有保证。

如果您想要特定订单中的第一条记录,请确保您要求它

答案 1 :(得分:1)

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

如果您的请求返回了多个元素并且您想要选择其中任何一个元素,那么您可能希望在没有指定顺序的情况下使用first