2013-03-06 59 views
0

这之间的连接是类我:添加两个表

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') 

现在我想列出前10名高价班

至少第一个问题我是在params我有organization_id基于过滤但我写我的控制器像这样,这是行不通的,因为它认为它应该在Class模型中找到organization_id,但它在Student模型中。

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

所以我想知道是否有办法解决这个问题?我想我应该在某个地方引入新的连接?但无法弄清楚。

+0

为什么不'Class'有任何关联定义?你可以发布'程序'模型吗?你的查询应该得到什么?所有学生连接到特定组织的最昂贵的课程? – Jesper 2013-03-06 20:20:56

+0

@Jesper:对不起,我更新了这个协会,基本上他们是在等级制中彼此悬挂。是的,你知道了:“为所有学生连接到特定组织的最昂贵的课程”谢谢 – Bohn 2013-03-06 20:27:28

回答

1

有一个在你的范围错字:joins:(:programs)应该joins(:programs)

获取基于在学生组织ID你可以做到这一点:

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

谢谢我用正确的名字和语法来更新问题,如下所示:joins(:students).order('price DESC') 但仍然它有同样的问题。它认为它应该在Class表上寻找organization_id。 – Bohn 2013-03-06 20:49:09

+0

请发布任何日志/错误消息。 – Jesper 2013-03-07 15:57:13