ruby-on-rails – 如何实现ruby on rails has_many(和类似)?
发布时间:2020-12-17 03:21:32 所属栏目:百科 来源:网络整理
导读:我正在分析rails源代码,因为我想了解has_many和类似结构的内部工作原理. 到目前为止,我能够找到方法的实现位置(link to github):它位于模块ActiveRecord :: Associations中 def has_many(name,options = {},extension) Builder::HasMany.build(self,name,op
我正在分析rails源代码,因为我想了解has_many和类似结构的内部工作原理.
到目前为止,我能够找到方法的实现位置(link to github):它位于模块ActiveRecord :: Associations中 def has_many(name,options = {},&extension) Builder::HasMany.build(self,name,options,&extension) end 这个eventualy结束于(link to github)类ActiveRecord :: Associations :: Builder :: CollectionAssociation as def self.build(model,&extension) new(model,&extension).build end 我的ruby技能已经结束了,我无法进一步追踪它,找到“新”实施的地方和它的作用. 有人能指出我正确的方向,也许可以评论一下,幕后发生了什么? 解决方法
基本上,new定义如下:
class Class def new(*args,&block) obj = allocate obj.initialize(*args,&block) # *actually* obj.send(:initialize,*args,&block) since initialize is private obj end end allocate定义如下: class Class def allocate # magic stuff for creating an empty object which cannot be expressed in Ruby: new_obj = Deep::Within::VM.__somehow_magically_allocate_memory__! new_obj.__class__ = self new_obj end end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |