【发布时间】: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