首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不断查询相关嵌套模型的成本( activerecord缓存结果吗?)

不断查询相关嵌套模型的成本( activerecord缓存结果吗?)
EN

Stack Overflow用户
提问于 2016-04-06 17:46:01
回答 1查看 35关注 0票数 0

假设我有一个User模型,它带有一个名为email_notificationsboolean标志。这让我们知道这个用户是否关心从应用程序接收电子邮件通知。

最近,我一直在将所有这些标志和设置移动到一个单独的子模型调用Preference中,以使其远离核心用户模型。User has_one Preference.

代码语言:javascript
复制
class User < ActiveRecord::Base
  has_one :preference, dependent: :destroy
  accepts_nested_attributes_for :preference

  scope :email_recipients, -> { where(preference: { email_notification: true} ) }

  def can_receive_email?
    preference.email_notification
  end
end

如您所见,我在模型上有一个助手作用域和一个助手方法。

但是,既然它位于另一个表中,我总是先查询关联:preference,然后得到所需的值。它不再直接从User模型本身获得。

这算不算糟糕的做法?或者Rails是否帮助出并缓存相关的模型,这样它就不必每次都重新查询?我喜欢把我的各种信任安排在一个单独的模型中,我确实认为这是一个很好的实践,但这种不断重新查询的潜在成本正在阻止我。

谢谢!

编辑:

我知道我可以做User.includes(:preference).blah_blah,但是我想避免在我调用用户的每一个地方更新它,而且可能并不总是提前知道我是否要查询子模型并需要包括一个.includes()

EN

回答 1

Stack Overflow用户

发布于 2016-04-06 18:18:18

Rails关联在被访问后存储在内存中,因此调用user.preference除了第一次被引用之外不会访问数据库。

而且,在这种情况下,includes不会产生多大影响,因为这是一个has_oneincludes通常用于在单个更大的查询中加载许多关联,而不是每次调用子对象时都访问数据库。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36458571

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档