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

时间:2016-07-21 12:14:56

标签: ruby-on-rails ruby-on-rails-5

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

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

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

最好的方法是什么?

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属性,具体取决于该特定销售中销售的服务数量。

2 个答案:

答案 0 :(得分:1)

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

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包含每项服务的价格。

答案 1 :(得分:0)

Service.where(&#34;你的where子句&#34;)。sales.pluck(:total_price).inject(:+)这将给出所有销售额total_price的总和。然后除以销售基价。