加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读