Ruby on Rails - Counting goals of a team in many matches

I've got a Match model and a Team model.

I want to count how many goals a Team scores during the league (so I have to sum all the scores of that team, in both home_matches and away_matches).

How can I do that? What columns should I put into the matches and teams database tables?

Answers


I'd assume your Match model looks something like this:

belongs_to :home_team, class_name:"Team"
belongs_to :away_team, class_name:"Team"

attr_accessible :home_goal_count, :away_goal_count

If so, you could add a method to extract the number of goals:

def goal_count
    home_matches.sum(:home_goal_count) + away_matches.sum(:away_goal_count)
end

Since this could be expensive (especially if you do it often), you might just cache this value into the team model and use an after_save hook on the Match model (and, if matches ever get deleted, then an after_destroy hook as well):

after_save :update_team_goals

def update_team_goals
    home_team.update_attribute(:goal_count_cache, home_team.goal_count)
    away_team.update_attribute(:goal_count_cache, away_team.goal_count)
end

Since you want to do this for leagues, you probably want to add a belongs_to :league on the Match model, a league parameter to the goal_count method (and its query), and a goal_count_cache_league column if you want to cache the value (only cache the most recently changed with my suggested implementation, but tweak as needed).


Need Your Help

Custom fonts in Getuikit with less preprocessor

css fonts uikit less

What is right way to make available custom fonts (e.g. google fonts) in my new theme?

About UNIX Resources Network

Original, collect and organize Developers related documents, information and materials, contains jQuery, Html, CSS, MySQL, .NET, ASP.NET, SQL, objective-c, iPhone, Ruby on Rails, C, SQL Server, Ruby, Arrays, Regex, ASP.NET MVC, WPF, XML, Ajax, DataBase, and so on.