ActiveRecord的finder方法之间的区别:take vs limit(1)

Cur*_*ind 17 activerecord ruby-on-rails ruby-on-rails-4

考虑以下ActiveRecord的finder方法.

  • .take.例.Account.take
  • .limit(1) 例. Account.limit(1)

现在,两种方法都有不同的名称,但它们生成相同的查询:

SELECT "accounts".* FROM "accounts" LIMIT 1
Run Code Online (Sandbox Code Playgroud)

那么,.take&之间有什么区别.limit(1)?或者他们是一样的?

tih*_*hom 23

来自文档

# File activerecord/lib/active_record/relation/finder_methods.rb, line 64
def take(limit = nil)
  limit ? limit(limit).to_a : find_take 
end
Run Code Online (Sandbox Code Playgroud)

take返回一个Array记录,同时limit返回一个可以与其他关系链接的ActiveRecord关系.


Ida*_*rye 5

根据API文档中的代码,区别在于limit返回一段Relation时间take返回一个Array.

使用limit你需要一个Relation你得到一个关系.要使用take你也可以使用一个数组(因为Array也有take),你也可以得到一个Array.因此,如果你想要一个Array反正,使用take,你不必担心源对象是RelationArray.