ActiveRecord の take と first の違いは?


どちらも LIMIT 1 した結果を返す。
ただし first は、order の指定がなければプライマリーキーでソートする。
となっているようです。

require "active_record"
ActiveRecord::Base.logger = ActiveSupport::Logger.new(STDOUT)
ActiveSupport::LogSubscriber.colorize_logging = false
ActiveRecord::Migration.verbose = false
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:")
silence_stream(STDOUT) do
  ActiveRecord::Schema.define do
    create_table :users do |t|
      t.string :name
    end
  end
  class User < ActiveRecord::Base
  end
  User.create!
end

User.take
User.first
User.order(:name).first
# >>   User Load (0.1ms)  SELECT  "users".* FROM "users" LIMIT 1
# >>   User Load (0.1ms)  SELECT  "users".* FROM "users"  ORDER BY "users"."id" ASC LIMIT 1
# >>   User Load (0.1ms)  SELECT  "users".* FROM "users"  ORDER BY "users"."name" ASC LIMIT 1