考虑拥有一个模型“专辑”和一个模型“艺术家”。专辑引用了一位艺术家。
我想要获取所有专辑的数组,按专辑艺术家姓名和专辑发行年份排序。
在普通 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 方法执行此操作的解决方案。我知道模型对象的 order 方法,并成功使用它按属性对对象进行排序。
但是,我不知道如何不仅按模型本身的属性进行排序,而且还按引用模型的属性(在本例中:“艺术家”的名称)进行排序。
感谢您的回答。
最佳答案
试试这个:
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")
也许您可以创建一个范围
,以便在您的Album
模型类中更轻松地访问此调用:
scope :artist_with_release_year, -> { joins(:artist).order("#{Artist.table_name}.name ASC, #{Album.table_name}.release_year") }
您可以稍后在应用程序中调用:
Album.artist_with_release_year
关于ruby-on-rails - rails : Order model object by attribute of referenced model object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26314831/