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

时间:2012-10-24 01:03:59

标签: sql ruby-on-rails activerecord

我已经设置了这些模型:

Course
  has_and_belongs_to_many Student

Student
  has_and_belongs_to_many Course
  has_many Books

Book
  belongs_to Student

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

2 个答案:

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