首页 > 解决方案 > 获取组的 Activerecord 计数(Rails 4.2)

问题描述

我正在尝试处理按类别组织的一组数据;下面的 ActiveRecord 查询是我用来布置表格的内容(类别标题,然后是产品信息(出于性能原因,它已在视图中完成,尽可能多地将逻辑放入模型中。)

我一直试图报告两件事:

  1. 按产品数量循环遍历最常用类别的有序列表;和
  2. 报告这些类别中的产品数量。

我已经尝试实施我在这里找到的内容,但很难被count_id接受。

这是我正在使用的:

<% @categories.each do |category| %> 
  <p><%= category.name %>;</p>
  <% category.products.includes(:rfid_tags).joins(:rfid_tags).order(name: :asc).limit(10).each do |product| %>
    <p><%= product.name %></p>
  <% end %>
<% end %>

类别模型(导出了这部分逻辑 IRL 以保持简短):

def warehouse_product_grouping
  self.products.includes(:rfid_tags).joins(:rfid_tags)
end  


Models:

#Warehouse.rb

has_many :tags, as: :location
has_many :products, through: :tags

#rfid_tag.rb

belongs_to product #

  #polymorphic
  belongs_to :trackable, polymorphic: true
  belongs_to :location, polymorphic: true

#Product.rb

  has_one :primary_category_assignment

  has_many :rfid_tags, as: :trackable

每个产品都分配给一个类别 - 关联是仓库 > 标签 > 产品 > category_assignment > 类别。

#CategoryAssignment.rb #this is a join table
  belongs_to :product, required: true
  belongs_to :category, required: true

#Category.rb
  has_many :products, through: :category_assignment

标签: ruby-on-railsruby-on-rails-4group-bycountrails-activerecord

解决方案


“报告产品数量”可以简单地完成category.products.count。为避免 N + 1 查询问题,我建议在使用类别时包含产品:<% @categories.includes(:products).each do |category| %>


推荐阅读