如何在rails模型中指定关联的热切加载

时间:2016-02-13 00:12:10

标签: ruby-on-rails has-many eager-loading

class A < ActiveRecord::Base
  has_many :Bs
  has_many :Cs
  ...
end

每当我使用单个查询对A进行查询(比如A.where(name: :abc))时,我希望加载所有的B和C,而不是多次调用数据库。

我不希望为我运行的每个查询指定.includes。如何在模型中指定预先加载?

我看了很多类似的问题并尝试过这样做,但它不起作用:

default_scope :include => [:Bs, :Cs]

1 个答案:

答案 0 :(得分:5)

default_scope { includes(:Bs, :Cs) }应该这样做。

据我所知,范围采用块作为参数而不是选项的哈希值。我刚刚在rails控制台中尝试过它,似乎可以工作。