【发布时间】:2016-06-29 19:41:02
【问题描述】:
我正在阅读 ActiverRecord::QueryMethods 的 Rails 源代码,以了解 eager_load 的 SQL 是如何创建的。
我有一个问题。 spawn 对象来自哪里?另外想问一下eager_load、includes、preload是怎么工作的。
ActiveRecord::QueryMethods
rails/activerecord/lib/active_record/relation/query_methods.rb
module ActiveRecord
module QueryMethods
extend ActiveSupport::Concern
class WhereChain
#leave out some codes
def eager_load(*args)
check_if_method_has_arguments!("eager_load", args)
spawn.eager_load!(*args)
#-----------------
Where spawn object comes from?
#-----------------
end
end
end
似乎 spawn_methods 文件做了一些事情,但我找不到需要文件
我的猜测 1:ActiveRecord::SpawnMethods
rails/activerecord/lib/active_record/relation/spawn_methods.rb
module ActiveRecord
module SpawnMethods
def spawn #:nodoc:
clone
end
end
end
我的猜测 2:ActiveRecord::Associations
rails/activerecord/lib/active_record/associations/collection_proxy.rb
module ActiveRecord
module Associations
class CollectionProxy < Relation
def scope
@association.scope
end
alias spawn scope
end
end
end
**如果您有任何有效阅读代码的建议,请给我一些建议。我会很感激的。
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-4 activerecord