0

有没有办法通过关联来限制急切加载的对象的数量?

考虑以下示例:

class Person < ActiveRecord::Base
  has_many :apples      
end

class Apple < ActiveRecord::Base
  belongs_to :person
end

我想让所有的人,加载他们的苹果...

Person.includes(:apples).limit(10)

...但我想将apple每人加载的对象数量限制为 5 个,这会加载所有 apples.

我尝试了以下方法:

  1. 在 Person 模型上定义新关系

    class Person < ActiveRecord::Base
      has_many :apples
      has_many :limited_apples, class_name: 'Apple', limit: 5
    end
    
  2. 利用ActiveRecord::Associations::Preloader

    people = Person.limit(50)
    ActiveRecord::Associations::Preloader.new(people, :limited_apples, limit: 5).run
    

两种方法都无法限制通过:apples关联加载的对象数量。我是在把自己引向一个兔子洞,还是错过了一些明显的东西?

4

1 回答 1

3

似乎这是不可能的。

如果您使用指定的 :limit 选项急切加载关联,它将被忽略,并返回所有关联的对象。http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html

于 2013-03-13T13:03:39.990 回答