限制预先加载的对象的数量

时间:2013-03-12 21:08:23

标签: ruby-on-rails-3 activerecord

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

考虑以下示例:

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
    
  3. 这两种方法都无法限制通过:apples关联加载的对象数。我是把自己带到了一个兔子洞里,还是错过了一些明显的东西?

1 个答案:

答案 0 :(得分:3)

似乎这是不可能的。

  

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