ruby-on-rails – 我什么时候应该使用委托,什么时候应该使用has_
发布时间:2020-12-17 03:32:56 所属栏目:百科 来源:网络整理
导读:Rails有两种很好的方法可以避免模型中的Demeter违规. 首先是: class Restaurant ActiveRecord::Base belongs_to :franchise delegate :owner,to: :franchiseend 第二个是: class Restaurant ActiveRecord::Base belongs_to :franchise has_one :owner,thro
Rails有两种很好的方法可以避免模型中的Demeter违规.
首先是: class Restaurant < ActiveRecord::Base belongs_to :franchise delegate :owner,to: :franchise end 第二个是: class Restaurant < ActiveRecord::Base belongs_to :franchise has_one :owner,through: :franchise end 有什么不同?在某些或所有情况下,有什么可以推荐一个选项吗? 我可以检测到的唯一区别是委托选项似乎生成两个SQL查询以获取后一个记录,而belongs_to:through似乎在一个查询中执行. 解决方法
has_one through:是rails关系,并针对某些情况进行了优化 – 例如,它将自动使用连接来获取记录,也可以在处理多个餐馆时急切加载以避免N 1问题:
Restaurant.all.includes(:owner).each{|r| some code accessing r.owner } 如果所有者是如上所述的代理代码(删除了.includes)将导致每个餐厅有两个查询,但是如果急切加载它们将全部被提取到一个 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |