2014-10-11 81 views
1

考慮擁有模型「相冊」和模型「藝術家」。專輯有一個藝術家的參考。Rails:通過參考模型對象的屬性排序模型對象

我想獲取所有專輯的數組,按照專輯的藝術家名稱和專輯發行年份排序。

在普通的SQL,它看起來就像是:

SELECT a1.name,a1.release_year,a2.name from albums a1 INNER JOIN artists a2 ON a1.artist_id=a2.id ORDER BY a2.name ASC, a1.release_year; 

我是新來的紅寶石和軌道,無法找到與Rails的方法這樣做的解決方案。我知道模型對象的順序方法,併成功地使用它來按屬性對對象進行排序。但是,我不知道如何對模型本身的屬性進行排序,也可以通過引用模型的屬性進行排序(在這種情況下:「藝術家」的名稱)。

感謝您的回答。

+0

和專輯將belong_to藝術家? – Surya 2014-10-11 12:55:56

+0

正是@Surya。 – nsommer 2014-10-11 12:59:59

回答

1

試試這個:

Album.joins(:artist).order('artists.name ASC, release_year') 

或:

Album.joins(:artist).order('artists.name ASC, albums.release_year') 

或:

Album.joins(:artist).order("#{Artist.table_name}.name ASC, #{Album.table_name}.release_year") 

也許你能爲這個電話更容易訪問創建scopeAlbum模型類:

scope :artist_with_release_year, -> { joins(:artist).order("#{Artist.table_name}.name ASC, #{Album.table_name}.release_year") } 

,你可以在你的應用程序再打:

Album.artist_with_release_year 
+0

我嘗試了您的第一條建議,並且工作正常,謝謝! – nsommer 2014-10-13 09:19:10

+0

我很高興你的問題解決了。 :) – Surya 2014-10-13 09:19:31