作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我不得不加入另一张 table 时,我真的很努力地试图让一群人上类。当我不加入时,我可以让小组工作,但是当我想按另一张 table 上的列分组时,我开始遇到问题。
Tables:
Book
id, category_id
Category
id, name
ActiveRecord schema:
class Category < ActiveRecord::Base
has_many :books
end
class Book < ActiveRecord::Base
belongs_to :category
end
books = Book.joins(:category).where(:select => 'count(books.id), Category.name', :group => 'Category.name')
[{:name => fiction, :count => 12}, {:name => non-fiction, :count => 4}]
最佳答案
如果您只是在计算每个类别的书籍数量,那么您可以从 has_many
中获得关联方法。关联可能就足够了(查看 Association Basics guide )。您可以使用以下方法获取属于特定类别的书籍数量
@category.books.size
array = Categories.all.map { |cat| { name: cat.name, count: cat.books.size } }
# books.rb
belongs_to :category, counter_cache: true
class AddBooksCountToCategories < ActiveRecord::Migration
def change
add_column :categories, :books_count, :integer, default: 0, null: false
Category.all.each do |cat|
Category.reset_counters(cat.id, :books)
end
end
end
counts = Category.joins(:books).count(group: 'categories.name')
.map { |k, v| { name: k, count: v } }
然后让它完全符合您在问题中指定的格式。
counter_cache
将始终是最高性能的,并且对于足够多的书籍,使用两个单独的查询进行急切加载也可能会给您带来更好的性能(这就是使用
includes
进行急切加载的原因在 Rails 2.1 中从使用连接更改为多个查询) .
关于ruby-on-rails - ActiveRecord group by on a join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16049594/
我是一名优秀的程序员,十分优秀!