2013-05-06 8 views
5

У меня есть две таблицы в моем веб-приложении: один для доноров (так называемые «доноры»), а другой - для пожертвований («пожертвования»). Когда вы нажимаете на донора, вы можете видеть все . их пожертвованияСредние значения по группе

пытаюсь средних значений, связанных с конкретной датой, для конкретной благотворительной организации, например, если эти записи существуют для доноров A:.

 *Donor A* 

    Date  Donation Amount 
05/04/2013   30 
05/04/2013   40 
05/05/2013   15 
05/05/2013   75 

Я хотел бы систему также рассчитать и показать, что средняя сумма пожертвования на 05/04/2013 составила 35, а средняя сумма пожертвования на 05/05/2013 составила 45.

В настоящее время я пытался использовать атрибут группы в моей модели донора:

def self.average_donateperdate 
    Donation.average(:donateamount, conditions: ["donor_id = ?", @donor], group: "donatedate") 
end 

Это не похоже на работу. Поскольку я новичок в Rails, я не совсем уверен, что это правильный способ сделать это или нет. Есть еще несколько сообщений, которые затрагивают эту тему, но никто из них не помог мне решить проблему. Любая помощь будет принята с благодарностью!

ответ

7

Самый простой синтаксис, чтобы сделать это:

@donor.donations.group(:donatedate).average(:donateamount) 

Это возвращает хэш в формате { 'donatedate' => 'average donateamount' }.

Естественно, предполагается, что у вас есть has_many :donations связь на вашей модели Donor. Многоразовый метод будет выглядеть следующим образом:

def average_donation_by_date 
    donations.group(:donatedate).average(:donateamount) 
end 

И теперь вы можете просто позвонить:

@donor.average_donation_by_date 

Чтобы это увидеть визуально, вы можете назвать это в контроллере:

@average_donations = @donor.average_donation_by_date.to_a.sort_by(&:first) 

и ваш вид может содержать примерно следующее:

<table> 
    <thead> 
    <tr> 
     <th>Date</th> 
     <th>Average Donation</th> 
    </tr> 
    </thead> 
    <tbody> 
    <% @average_donations.each do |date, amount| %> 
     <tr> 
     <td><%= date.strftime('MM/dd/yyyy') %></td> 
     <td><%= amount %></td> 
     </tr> 
    <% end %> 
    </tbody> 
</table> 
+0

Это фантастика. Отлично! – bork121

+0

Если бы мне хотелось, чтобы эти средние значения отображались в таблице html в отличие от хеша, как бы я это сделал? Есть ли доступная документация, которая объясняет это? Спасибо! – bork121

+0

@ bork121: обновлено для этого. – PinnyM