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

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)将导致每个餐厅有两个查询,但是如果急切加载它们将全部被提取到一个

(编辑:李大同)

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

    推荐文章
      热点阅读