考虑拥有一张模特专辑'和模特的艺术家'。专辑中有一位艺术家的参考。
我希望获得所有专辑的数组,按专辑的艺术家名称和专辑发行年份排序。
在纯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;
我是ruby和rails的新手,并且无法通过rails'找到解决方案。方法。我知道模型对象的顺序方法,并成功地用它来按属性对对象进行排序。
但是,我不知道如何不仅通过模型本身的属性进行排序,而且还通过引用模型的属性(在这种情况下:'艺术家' )。
感谢您的回答。
答案 0 :(得分: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")
您可以创建一个scope
,以便在Album
模型类中轻松访问此调用:
scope :artist_with_release_year, -> { joins(:artist).order("#{Artist.table_name}.name ASC, #{Album.table_name}.release_year") }
您可以稍后在应用中致电:
Album.artist_with_release_year