2016-07-21 6 views
0

私は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属性を有する。

+0

サービスと販売の関係を分かち合うことができますか?そのサービスには売り上げはありますか?しかし、あなたが2つのモデルの間の関係を分かち合うことができれば素晴らしいことでしょう。 –

+0

サービスと販売との間にhas_manyアソシエーションがある場合は、これを試してください:Service.includes(:sales).select( "services.name、count(sales.id)as sold_count") – power

+0

はい、申し訳ありません。関係を前に!そのmany_to_many関係! –

答えて

1

これを試すことができますか?ここでは、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を返します。次に、売上の基本価格で割ります。

関連する問題