0

アソシエーションを介して積極的に読み込まれるオブジェクトの数を制限する方法はありますか?

次の例を検討してください。

class Person < ActiveRecord::Base
  has_many :apples      
end

class Apple < ActiveRecord::Base
  belongs_to :person
end

りんごを積み込んでいるすべての人を集めたい...

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

apple...しかし、 1 人あたりにロードされるオブジェクトの数を 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 に答える