使用時に結果の数を制限したい特定のインスタンスの関連付けを通じてhas_manyを制限しようとしています.includes(:model)
これが私がこれまでに持っているものです:
class Student < ActiveRecord::Base
has_many :courses, :through => :students_courses
has_many :sample_courses, :through => :students_courses, :limit => 3, :source => :course, :order => 'updated_at DESC'
end
class Course < ActiveRecord::Base
has_many :students, :through => :students_courses
end
ここまでは順調ですね。Railsコンソールを起動して学生をロードすると、サンプルコースにアクセスでき、3つの結果が返されます。ただし、クエリを実行して試してみるとincludes
、コース名を印刷しようとしているビューで、3つだけでなく、学生のすべてのコースがロードされます。
# Query in controller
@students.where(...stuff..).includes(:sample_courses)
# In the view -
@students.each do |student| courses = student.sample_courses
この最後のcourses
変数は、3つのサンプルコースだけでなく、学生に関連付けられているすべてのコースを返します。コントローラでをスキップしincludes
てビューを同一に保つと、サンプルコースが正しくクエリされます。もちろん、あなたは私が避けようとしているn個のクエリを実行しています。
では、どうすれば3つのコースを熱心にロードできますか?