Rails:按引用的模型对象的属性对模型对象进行排序

时间:2014-10-11 12:45:43

标签: ruby-on-rails ruby sorting activerecord

考虑拥有一张模特专辑'和模特的艺术家'。专辑中有一位艺术家的参考。

我希望获得所有专辑的数组,按专辑的艺术家名称和专辑发行年份排序。

在纯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'找到解决方案。方法。我知道模型对象的顺序方法,并成功地用它来按属性对对象进行排序。

但是,我不知道如何不仅通过模型本身的属性进行排序,而且还通过引用模型的属性(在这种情况下:'艺术家' )。

感谢您的回答。

1 个答案:

答案 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