如何通过匹配字符串获取记录数

How to get number of records by matching a string

我有一个包含 3 个关键字的服务模型。而且,我有一个销售模型,计算为客户提供的服务数量。我正在尝试做一个统计报告,我想问的是获得服务销售的服务数量的最佳方法是什么?

例如,我有售出 10 次的服务 A,售出 20 次的服务 B 等。如何以编程方式轻松获取这些值?

我不想单独去搜索每个服务实例的销售模型。

最好的解决方法是什么?

class Sale < ApplicationRecord

  has_many :sale_services
  has_many :services, :through => :sale_services

end

class Service < ApplicationRecord
  has_many :sale_services
  has_many :sales, through: :sale_services
end

class SaleService < ApplicationRecord
  belongs_to :sale, optional: true
  belongs_to :service, optional: true
end

每项服务都有一个价格,每笔销售都有一个 total_price 属性,具体取决于该特定销售中售出的服务数量。

你能试试这个吗?在这里,我假设每项服务的销售额是服务售出的次数。

Service.includes(:sales).group("services.name").count("sales")

这应该给出如下结果:

service_posts = {"service1"=>7, "service2"=>2, "service3"=>0, "service4"=>3, "service5"=>4}

如果您想获得比您需要的价格,请执行以下操作:

service_prices = {}
Service.includes(:sales).each do |service|
  service_prices[service.name] = service_posts[service.name] * service.price
end

所以 service_prices 包含每项服务的价格。

Service.where("your where clause").sales.pluck(:total_price).inject(:+) 这将给出所有销售额的总和 total_price。然后除以销售底价。