I have a player model and a game model set up with a HABTM. I am trying to keep track of statistics for a player based on a hits and misses, which the user marks when editing a game. When the game is done editing an email is sent to the other team to confirm the game. If it is confirmed the statistics should be updated on the site. Here''s what I have: def confirm_game @games = Game.find(:all) for game in @games if (found the right game through hashing) game.update_attribute(:confirmed, true) game.update_statistics flash[:notice] = "Thank you for validating the game." break end end end Game model def update_statistics for team in self.teams for player in team.players player.update_statistics(self) end team.update_statistics School.find(team.school_id).update_statistics end end Player Model def update_statistics(game) for player in @game.players self.update_attribute(:hit_percentage, (player.hit.to_f / (player.hit.to_f + player.misses.to_f)) * 100) unless player.misses =0 self.update_attribute(:opp_percentage, player.points.to_f / (player.hit.to_f + player.misses.to_f)) unless player.misses == 0 end end end def add_hit self.update_attribute(:hit, hit + 1) end I don''t think this is the correct way to represent each hit a player has per game. How do I set it up like that? Also how do I write a view to show the game with each player''s hits/ misses? --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I am not sure that your present approach with respect to the data is sound. Generally, statistics are derived and updated from accumulated raw data. What might prove more beneficial in the long run is to simply store each player''s raw performance. So, assuming baseball as the sport, one could store this information in the GamePlayer model. Something like this (NOT TESTED) class Player has_many :player_game_stats, :class_name => ''GamePlayer'' has_many :player_games, :class_name => ''GamePlayer'', :include => :game has_many :games, :through => :player_games class Games has_many :game_players, :include => :player has_many :line_ups, :class_name => ''GamePlayer'' has_many :players, :through => :game_players class GamePlayer belongs_to :player belongs_to :game with model attributes / db columns: player_id game_id position_played innings_played batting_order at_bats strike_outs base_on-errors walks singles doubles triples hr rbi ... and so forth. Then you simply derive your statistics from the detailed records in player_games. This can be done at the DBMS level using stored procedures in many cases thus simplifying your application even further. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---