2016-07-21 3 views
0

키워드가 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 속성이 있습니다.

+0

당신은 서비스와 판매 사이의 관계를 나눌 수 있습니까, 나는 그 서비스 has_many 판매가 맞습니까? 그러나 두 모델 간의 관계를 공유 할 수 있다면 좋을 것입니다. –

+0

서비스와 판매 사이에 has_many 연결이있는 경우 다음을 시도하십시오. Service.includes (: sales) .select ("services.name, count (sales.id) as sold_count") – power

+0

예 죄송합니다. 전에 관계! 그 many_to_many 관계! –

답변

1

시도해 볼 수 있습니까? 여기서 서비스 당 매출은 서비스가 판매 된 횟수라고 가정합니다. 당신은 당신이 좋아 할 필요가보다 가격을 얻으려면

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

:이 같은 결과 무언가를 제공해야

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

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

그래서 service_prices는 각 서비스에 대한 가격을 포함 .

+0

네, 확실히 이걸 제가 환호하고 싶습니다! 또한 가격을 합산하는 데 도움을 줄 수 있습니까? 각 서비스에는 가격이 있으며 방금 한 일을 기준으로 어떻게 해당 서비스의 가격 * 수를 합산 할 수 있습니까? –

+0

답변을 업데이트했습니다. 시도해보십시오. – power

0

Service.where ("your where 절"). sales.pluck (: total_price) .inject (: +) 그러면 total_price의 모든 판매액 합계가 계산됩니다. 그런 다음이를 판매 기본 가격으로 나눕니다.

관련 문제