【发布时间】:2019-03-10 23:01:58
【问题描述】:
这是我原来的问题。我有两个模型如下。
class Author < ActiveRecord::Base
has_many :books
end
和
class Book < ActiveRecord::Base
belongs_to :author
scope :available, ->{ where(available: true) }
end
我想离开加入作者到图书的“可用”范围。以下是我想在 DB 上执行的查询。可以这样做吗?
Select authors.* , count(books.*) as books_count
From authors left outer join books on books.author_id = authors.id
and books.available = true
group by (authors.id) order by books_count;
我试过以下方法
Author.joins("LEFT OUTER JOIN authors on books.author_id = authors.id")
.merge(Book.available)
.select("authors.* , count(books.*) as books_count")
.group("authors.id").order("books_count")
但这会导致以下查询。
Select authors.* , count(books.*) as books_count
From authors left outer join books on books.author_id = authors.id
where books.available = true
group by (authors.id) order by books_count;
所以它会删除所有没有书的作者。
重要提示:我的 AR 版本没有 left_outer_joins 方法
【问题讨论】:
-
你想要的输出是什么?
-
查找每个作者的书数(也有没有书的作者)并按书数排序。
-
@ShanakaKuruwita 所以你的意思是它应该包括没有书但books_count应该是0的作者。是吗?
-
@Vishal 完全正确
标签: ruby-on-rails ruby-on-rails-3 activerecord rails-activerecord