我有:
Book
has_many :book_authors
has_many :authors, through: :book_authors
BookAuthor
belongs_to :author
belongs_to :book
Author
has_many :book_authors
所以我可以列出多位作者的书籍
我想按第一作者的名字对书籍进行排序。
有什么办法吗?
答案 0 :(得分:2)
只有当所有书籍都有作者时,这才有效。否则,没有作者的书籍将不会出现
Book.joins(:authors).order('authors.name desc')
答案 1 :(得分:1)
您将接受查询并添加:
order by authors
这将按列表中第一位作者的名字排序。
答案 2 :(得分:1)
您可以在作者name
列上使用汇总功能:
Book.left_outer_joins(:authors).group("books.id").order("MIN(authors.name)")
@Pragash
的解决方案Book.joins(:authors).order('authors.name desc')
如果有很多作者,则会多次返回相同的书籍。但是,使用.distinct
会返回独特的图书。
Book.left_outer_joins(:authors).order('authors.name').distinct