今天下午闲来无事,研究了一下 ActiveReocrd 的代码,但是却发现了一件很令我困惑的事情。
我最开始对 ActiveReocrd 的实现心里大概有个猜测,但是看了源码之后却发现不是这样。
以 limit 方法为例:
# Specifies a limit for the number of records to retrieve.
#
# User.limit(10) # generated SQL has 'LIMIT 10'
#
# User.limit(10).limit(20) # generated SQL has 'LIMIT 20'
def limit(value)
spawn.limit!(value)
end
def limit!(value) # :nodoc:
self.limit_value = value
self
end
可以看到这里有一个 limit
方法和一个 limit!
方法,我过去猜测的 ActiveRecord 的实现是 limit!
这种。
可通常我们在代码里使用的都是 limit
方法,limit!
在这里看起来像是一个被 deprecated 的旧方法。
翻了半天代码都没有看明白这个 spawn 到底是干什么的,大家有没有研究过这个的,或者有相关文章的,可以发发链接,一起学习~