有没有办法通过关联来限制预先加载的对象的数量?
考虑以下示例:
class Person < ActiveRecord::Base
has_many :apples
end
class Apple < ActiveRecord::Base
belongs_to :person
end
我希望得到所有人,加载他们的苹果......
Person.includes(:apples).limit(10)
...但我想将每人加载的apple
个对象的数量限制为5,这会加载所有 apples
。
我尝试了以下内容:
在Person模型上定义新关系
class Person < ActiveRecord::Base
has_many :apples
has_many :limited_apples, class_name: 'Apple', limit: 5
end
使用ActiveRecord::Associations::Preloader
people = Person.limit(50)
ActiveRecord::Associations::Preloader.new(people, :limited_apples, limit: 5).run
这两种方法都无法限制通过:apples
关联加载的对象数。我是把自己带到了一个兔子洞里,还是错过了一些明显的东西?
答案 0 :(得分:3)
似乎这是不可能的。
如果您急切地使用指定的:limit选项加载关联,它将被忽略,返回所有关联的对象。 http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html