Rails:如何获取深度为2'has_many'级别的记录?

foo*_*bar 1 sql activerecord ruby-on-rails

我已经设置了这些模型:

Course
  has_and_belongs_to_many Student

Student
  has_and_belongs_to_many Course
  has_many Books

Book
  belongs_to Student
Run Code Online (Sandbox Code Playgroud)

如何使用ActiveRecord高效获取课程的所有书籍?

Luk*_*uke 5

试试这个:

Course.includes(:students => { :books })
Run Code Online (Sandbox Code Playgroud)

文档在这里,在"渴望加载关联"下.

编辑

对不起,我误解了这个问题.我看到你关注的是特定课程的书籍.在这种情况下,我会建议这样的事情:

Book.includes(:student => :courses).where(["course.id = ?", @course.id]).limit(5)
Run Code Online (Sandbox Code Playgroud)

Course模型上添加此方法可能更容易:

class Course < ActiveRecord::Base
  def books(max = 10)
    Book.includes(:student => :courses).where(["course.id = ?", self]).limit(max)
  end
end
Run Code Online (Sandbox Code Playgroud)

该代码可能不完全正确,但它应该给你正确的想法.

此外,您可能希望查看问题,以寻找自己定义此内容的潜在替代解决方案.