是否有内置的方法来预加载单个activerecord对象(不是集合)的协议?

时间:2014-09-03 07:45:51

标签: ruby-on-rails ruby activerecord eager-loading

我需要这样的东西:

user = current_shop.user.includes(:comments, :statistics, :messages)

#includes方法仅适用于AR集合。如何在不为每个对象创建单独的变量的情况下预加载所有需要的对象(@comments = user.comments, @messages = user.messages, etc)?

感谢名单

2 个答案:

答案 0 :(得分:0)

老实说,我从未尝试过这个,但看起来就像你需要的那样

preloader类上的Rails docs最近发生了变化,但在较旧的api版本中,它是:

  

渴望加载   给定活动记录记录的命名关联。

语法应该是这样的:

ActiveRecord::Associations::Preloader.new([current_shop.user], [:comments, :statistics, :messages]).run

尝试一下,看看它是否按预期工作?

答案 1 :(得分:-1)

不,为什么你不能这样做。如果您在所有关联的表中都有user_id,那么您可以这样做:

User.includes([:comments, :statistics, :messages])
你错误地称之为包含。如果你想要包含更多的模型,你需要传递一个数组。

由于