>> users = User.where(created_at: Time.now-7.days..Time.now).order(:created_at)
User Load (0.5ms) SELECT "users".* FROM "users" WHERE ("users"."created_at" BETWEEN $1 AND $2) ORDER BY "users"."created_at" ASC [["created_at", 2016-11-11 09:59:00 UTC], ["created_at", 2016-11-18 09:59:00 UTC]]
=> #<ActiveRecord::Relation [#<User id: 6, email: nil, first_name: nil, last_name: nil, username: "arslan_ali505", phone_number: nil, address: nil, created_at: "2016-11-14 16:02:27", updated_at: "2016-11-14 16:02:27", role_id: 7, temp_password: "P8ijrXZErI0=", temp_password_changed: false>, #<User id: 7, email: nil, first_name: nil, last_name: nil, username: "arslan_ali_arslan_ali170", phone_number: nil, address: nil, created_at: "2016-11-16 11:41:57", updated_at: "2016-11-16 18:58:37", role_id: 3, temp_password: "e27aad7b817354f3", temp_password_changed: true>, #<User id: 8, email: nil, first_name: "John", last_name: "Don", username: "jhondon213", phone_number: nil, address: nil, created_at: "2016-11-17 13:09:07", updated_at: "2016-11-17 13:09:43", role_id: 7, temp_password: nil, temp_password_changed: true>]>
>> users.first
=> #<User id: 6, email: nil, first_name: nil, last_name: nil, username: "arslan_ali505", phone_number: nil, address: nil, created_at: "2016-11-14 16:02:27", updated_at: "2016-11-14 16:02:27", role_id: 7, temp_password: "P8ijrXZErI0=", temp_password_changed: false>
>> users.last
=> #<User id: 8, email: nil, first_name: "John", last_name: "Don", username: "jhondon213", phone_number: nil, address: nil, created_at: "2016-11-17 13:09:07", updated_at: "2016-11-17 13:09:43", role_id: 7, temp_password: nil, temp_password_changed: true>
所寫的查詢每個都會返回一條記錄('.order(:created_at).first'將會產生一個類似'... ORDER BY created_at LIMIT 1'的查詢,同樣對於' .last'),所以我不確定你的意思,「它只會返回很多與每個查詢。」 –
@Jordan我在Rails 3.2中,如果它很重要。我以爲這個查詢會返回大量的ActiveRecord對象,然後我只是第一次和最後一次採摘。 – slindsey3000
不,'Model.where(...)。order(...)'給你一個關係,但不接觸數據庫,在關係上調用'first'或'last'調整查詢以包含LIMIT子句(並顛倒'last'情況下的順序),然後將單行查詢發送到數據庫。 –