【问题标题】:Preload associations of an already loaded model已加载模型的预加载关联
【发布时间】:2014-06-18 21:03:05
【问题描述】:

如果我有一个 ActiveRecord 模型的实例,并且我知道我会大量使用它的关联,我会使用 preload 或在 ActiveRecord::Relation 上的 include 方法预加载它们:Model.where(...).preload(:associated_model).first

但是有没有办法在模型已经实例化时预加载模型的关联而不重新加载它?

假设我加载了我的模型:

model_instance = Model.find(x)

那么,我会期待这样的:

model_instance.load(:associated_model)

使用 load 方法进行查询以查找 associated_model 并预加载它,但无需重新加载 model_instance。

【问题讨论】:

  • 你为什么不直接使用model_instance.associated_model 它将加载关联而不重新加载model_instance。我错过了什么吗?
  • 事实是,我希望能够多次调用 model_instance.associated_model.method 而无需在每次调用时重新加载 associated_model。
  • 我认为它不会在第一次之后重新加载关联。你可以在 rails 控制台试试。它只会在第一次和下一次使用已经加载的关联时查询数据库。
  • 该死,我觉得自己很愚蠢。你是对的。我一直认为关联模型在调用后没有被缓存。如果您希望我接受,请将其作为答案!
  • 很高兴听到没有更多的困惑 :)

标签: ruby-on-rails activerecord


【解决方案1】:

使用model_instance.associated_model 只会第一次加载关联。

如果我们打开 rails 控制台并在那里尝试,我们会看到它只是第一次查询了数据库,之后对关联模型的所有调用都没有从数据库中加载它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2023-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多