考虑以下ActiveRecord的finder方法。
.take
。例。 Account.take
.limit(1)
示例。 Account.limit(1)
现在, 虽然两种方法都有不同的名称,但它们生成相同的查询:
SELECT "accounts".* FROM "accounts" LIMIT 1
那么,.take
和...之间的区别是什么? .limit(1)
?或者他们是一样的?
答案 0 :(得分:23)
来自docs
# File activerecord/lib/active_record/relation/finder_methods.rb, line 64
def take(limit = nil)
limit ? limit(limit).to_a : find_take
end
take
返回Array
条记录,而limit
返回可与其他关系链接的ActiveRecord关系。
答案 1 :(得分:5)
根据the API documentation中的代码,区别在于limit
返回Relation
而take
返回Array
。
要使用limit
,您需要Relation
并获得关系。要使用take
,您还可以使用数组(因为Array
也有take
),您还可以获得Array
。因此,如果您还需要Array
,请使用take
,您不必担心源对象是Relation
还是Array
。
答案 2 :(得分:2)
limit(1)
将返回一个ActiveRecord :: Relation,这意味着你可以将更多链接到它上面(例如Account.limit(1).where(...)
。
take
将返回一个数组(来自已加载的查询,或执行limit(1)
并返回数组)