ruby-on-rails – 为什么ActiveRecord不够聪明,不知道父亲的obje
发布时间:2020-12-17 02:57:55 所属栏目:百科 来源:网络整理
导读:@father = Hierarchy.find(:first,:conditions = ['label = ?','father']) @father.children.each do |child| puts @father.object_id == child.parent.object_id end 我原以为这里的结果都是真的. 相反,他们都是假的. 为什么ActiveRecord以这种方式工作而不
@father = Hierarchy.find(:first,:conditions => ['label = ?','father']) @father.children.each do |child| puts @father.object_id == child.parent.object_id end 我原以为这里的结果都是真的. 相反,他们都是假的. 为什么ActiveRecord以这种方式工作而不是认识到这些是相同的Ruby对象? 解决方法
要在可能的情况下返回现有对象而不是创建新对象,ActiveRecord必须跟踪创建了哪些对象以及它们响应的数据库中的哪个条目,这将是一些开销.即便如此,它仍然需要在数据库中查找child.parent才能知道它与@father代表的条目相同,因此从这个缓存中没有任何可观的增益性能(在ruby方面,它保证分配多个对象但是以记账开销为代价,但在数据库方面它应该基本相同).
因此,鉴于AR人员可能决定防止对应于相同数据库条目的不同对象将是有害的或者至少不值得努力,所以他们选择不这样做. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |