我设置了这些模型:
Course
has_and_belongs_to_many Student
Student
has_and_belongs_to_many Course
has_many Books
Book
belongs_to Student
如何使用 ActiveRecord 有效地获取课程的所有书籍?
我设置了这些模型:
Course
has_and_belongs_to_many Student
Student
has_and_belongs_to_many Course
has_many Books
Book
belongs_to Student
如何使用 ActiveRecord 有效地获取课程的所有书籍?
尝试这个:
Course.includes(:students => { :books })
文档在这里,在“Eager loading of associations”下。
已编辑
对不起,我误读了这个问题。我看到您的重点是给定课程的书籍。在这种情况下,我会推荐这样的东西:
Book.includes(:student => :courses).where(["course.id = ?", @course.id]).limit(5)
将其添加为模型上的方法可能会更容易Course
:
class Course < ActiveRecord::Base
def books(max = 10)
Book.includes(:student => :courses).where(["course.id = ?", self]).limit(max)
end
end
该代码可能不完全正确,但它应该为您提供正确的想法。
此外,您可能想查看这个问题,以寻找自己定义这些东西的潜在替代解决方案。
我想知道您是否可以使用直通关联并执行类似...
Course
has_and_belongs_to_many :students
has_many :books, :through => :students
Student
has_and_belongs_to_many :courses
has_many :books
Book
belongs_to :student
现在您可以调用 Course.books 来返回与课程相关的所有书籍。