我已经设置了这些模型:
Course
has_and_belongs_to_many Student
Student
has_and_belongs_to_many Course
has_many Books
Book
belongs_to Student
如何使用ActiveRecord高效获取课程的所有图书?
答案 0 :(得分:5)
试试这个:
Course.includes(:students => { :books })
文档是here,在“渴望加载关联”下。
<强>被修改强>
抱歉,我误解了这个问题。我看到你关注的是特定课程的书籍。在这种情况下,我会推荐这样的东西:
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
该代码可能不完全正确,但它应该给你正确的想法。
此外,您可能希望查看this问题,了解自己定义此内容的潜在备用解决方案。
答案 1 :(得分:2)
我想知道你是否可以使用通过关联并做类似的事情......
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来返回与课程相关的所有书籍。