【问题标题】:Rails: Order model object by attribute of referenced model objectRails:按引用模型对象的属性对模型对象进行排序
【发布时间】:2014-10-11 12:45:42
【问题描述】:

考虑拥有一个模特“专辑”和模特“艺术家”。专辑中提到了一位艺术家。

我想获取所有专辑的数组,按专辑艺术家的姓名和专辑发行年份排序。

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

但是,我不知道如何不仅根据模型本身的属性进行排序,还根据引用模型的属性(在本例中为“艺术家”的名称)进行排序。

感谢您的回答。

【问题讨论】:

  • 专辑会属于_艺术家吗?

标签: ruby-on-rails ruby sorting activerecord


【解决方案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

【讨论】:

    猜你喜欢
    • 2017-07-21
    • 1970-01-01
    • 2011-03-21
    • 2016-02-08
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2018-07-02
    • 2011-07-07
    相关资源
    最近更新 更多