1

我设置了这些模型:

Course
  has_and_belongs_to_many Student

Student
  has_and_belongs_to_many Course
  has_many Books

Book
  belongs_to Student

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

4

2 回答 2

6

尝试这个:

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

该代码可能不完全正确,但它应该为您提供正确的想法。

此外,您可能想查看这个问题,以寻找自己定义这些东西的潜在替代解决方案。

于 2012-10-24T01:16:37.660 回答
3

我想知道您是否可以使用直通关联并执行类似...

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 来返回与课程相关的所有书籍。

于 2012-10-25T13:02:30.057 回答