2013-03-06 102 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