Reputation: 12596
I've got a Match model and a Team model. I want to run an instance method (written inside the Team model) after a Match has been saved. Here's what I've got.
def goals_sum
unless goal_count_cache
goal_count = a_goals_sum + b_goals_sum
update_attribute(:goal_count_cache, goal_count)
end
goal_count_cache
end
and it works. Now I need to run this whenever a match gets saved. So I tried this:
after_save :Team.goals_sum
after_destroy :Team.goals_sum
And it doesn't work. I know I'm missing something basic, but I still can't go through with it. Any tips?
Upvotes: 3
Views: 2874
Reputation: 6644
You can just define a private method on Match
that delegates to the method on Team
(otherwise, how would it know which team to run the method on? You say it's an instance method, and I assume a match has teams that are playing it).
after_save :update_teams_goals_sum
after_destroy :update_teams_goals_sum
private
def update_teams_goals_sum
[team_a, team_b].each &:goals_sum
end
Upvotes: 3
Reputation: 1308
after_save :notify_team
after_destroy :notify_team
private
def notify_team
Team.goals_sum
end
Upvotes: 2