在两个表之间添加JOIN

时间:2013-03-06 19:28:00

标签: ruby-on-rails ruby-on-rails-3.2 rails-activerecord

以下是我的课程:

Model Organization
has_many Students

Model Student
has_many Classes
belongs_to Organization

Model Class
a field named : price
belongs_to Student
scope :top_expensive_classes, joins(:students).order('price DESC')

现在我想列出十大昂贵的课程

至少我遇到的第一个问题是在params我有organization_id根据它进行过滤但是我写这样的控制器不能正常工作,因为它认为它应该找到organization_id在Class模型中,但它位于Student模型中。

@results = Class.top_expensive_classes.where(organization_id: params[:id]).limit(RESULT_SET_COUNT)

所以我想知道是否有办法解决这个问题?我想我应该在某处介绍一个新的加入?但无法理解。

1 个答案:

答案 0 :(得分:1)

您的范围内存在拼写错误:joins:(:programs)应为joins(:programs)

要根据学生中的组织ID进行提取,您可以执行以下操作:

@results = Class.top_expensive_classes
  .joins(student: :organization)
  .where(organization: {id: params[:id]})