ruby-on-rails 预加载已加载模型的关联

n53p2ov0  于 2023-01-22  发布在  Ruby
关注(0)|答案(2)|浏览(162)

如果我有一个ActiveRecord模型的示例,并且我知道我会使用它的很多关联,我会使用ActiveRecord::Relation上的preload或include方法预加载它们:Model.where(...).preload(:associated_model).first.
但是有没有一种方法可以在模型已经示例化的情况下预加载模型的关联,而不用重新加载它呢?
假设我加载了模型:

model_instance = Model.find(x)

那么,我会期待这样的结果:

model_instance.load(:associated_model)

使用load方法,该方法将执行查询以查找associated_model并预加载它,但不重新加载model_instance。

ccrfmcuu

ccrfmcuu1#

使用model_instance.associated_model将仅第一次加载关联。
如果我们打开rails console并在那里尝试,我们会看到它只在第一次查询数据库,之后对关联模型的所有调用都没有从数据库加载它。

hwamh0ep

hwamh0ep2#

这将通过一个查询对一组模型执行此操作(对于单个查询,使用[my_model]代替my_models):

ActiveRecord::Associations::Preloader.new(records: my_models,
  associations: [:my_association]).call

相关问题