2017-01-31 11 views
0

私は、ユーザーが出席するために支払ったすべてのアクティブなイベントの合計を計算したいだけです。もしあなたが私に助言を与えることができれば、私は非常にわかりにくいので、感謝することができます。多くのおかげでevent.rbで計算を含むメソッド - Rails 4

event.rb 
has_many :payments 

payment 
belongs_to :event 

iは、以下の方法を試してみましたが、何の成功

def self.active_events 
    active_events = live_events.open_events 
    active_events.all.each do |event| 
     event.price * event.payments.count 
    end 
    end 
+0

これは正解です:http://stackoverflow.com/a/41964357/1536309 –

答えて

3

あなたは、単に方法を以下では

total = 0 
Event.live_events.open_events.find_each { |e| total += e.price * e.payments.count } 

これを行うことができますEvent.rbは、意味のある名前のメソッドに配置します。 これはあなたのために働くでしょう。

def self.total_price_for_active_events 
    total = 0 
    Event.live_events.open_events.find_each { |e| total += e.price * e.payments.count } 
    total 
end 

ほとんど最適化された方法

def self.total_price_for_active_events 
    Event.live_events.open_events.joins(:payments).sum("events.price") 
end 
+0

素晴らしいです!ありがとうございました!ありがとうございました !ありがとうございました!!!!!!!!!!!! @dnsh – ARTLoe

+1

@ARTLoeよろしくお願いします。 – dnsh

1

あなたはあまりにもオフに良いスタートじゃないんです!残念ながら、そこにあるのは始まりにすぎません。各イベントの合計合計がである配列を生成しています。残っているのは、それらを一緒に追加することです:

def self.active_events 
    active_events = live_events.open_events 
    costs = active_events.all.each do |event| 
     event.price * event.payments.count 
    end 
    costs.reduce(0) do |sum,x| 
     sum + x 
    end 
    end 

あなたはまた、本当の空想を取得し、簡単に使用することができます

costs.reduce(0, :+) 
関連する問題