mrmarkham
2007-Apr-10 01:34 UTC
ActiveRecord: Pointing to two records in one table from a record in another table
I''m relatively new to Rails (well, I got involved in it last fall, but got away from it) and am trying to figure out a reasonable way to model the following: team - id - name game - id - first_team_id - frist_team_score - second_team_id - second_team_score There will be lots of other information, but I was hoping to find an elegant way to point to two different rows in the team table (ideally allowing ActiveRecord to help me out) from one row in the game table. Obviously team - has_many :games game - has_many :teams {:limit => ''2''} Gets me somewhat there, but I also need to know things like the scores for each time. That way I can figure out which team won to determine things like season records, etc. It''s a very simplified model, but if someone has a good way to handle that scenario, I think the rest will fall in place. Thanks! Andy --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Thorsten
2007-Apr-10 08:31 UTC
Re: ActiveRecord: Pointing to two records in one table from a record in another table
something like this: class Team < ActiveRecord::Base has_many :games_as_home, :foreign_key => "first_team_id" has_many :games_as_guest, :foreign_key => "second_team_id" end class Game < ActiveRecord::Base belongs_to :home_team, :foreign_key => "first_team_id" belongs_to :guest_team, :foreign_key => "second_team_id" end Then you can e.g. do: @team = @Team.find(params[:id] @home_games = @team.games_as_home @guest_games = @team.games_as_guest @no_of_games = @home_games.count + @guest_games.count @home_games_won = @home_games.count :conditions => "first_team_score > second_team_score" @guest_games_won = @guest_games.count, :conditions => "first_team_score < second_team_score" @tie_games = home_games.count :conditions => "first_team_score second_team_score" + @guest_games.count :conditions => "first_team_score = second_team_score" you could encapsulate some of that stuf into a Model method too, if you need to do those calculations often throughout your app. On 10 Apr., 03:34, "mrmarkham" <andy.markham.ad...-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> I''m relatively new to Rails (well, I got involved in it last fall, but > got away from it) and am trying to figure out a reasonable way to > model the following: > > team > - id > - name > > game > - id > - first_team_id > - frist_team_score > - second_team_id > - second_team_score > > There will be lots of other information, but I was hoping to find an > elegant way to point to two different rows in the team table (ideally > allowing ActiveRecord to help me out) from one row in the game table. > > Obviously > team - has_many :games > game - has_many :teams {:limit => ''2''} > > Gets me somewhat there, but I also need to know things like the scores > for each time. That way I can figure out which team won to determine > things like season records, etc. > > It''s a very simplified model, but if someone has a good way to handle > that scenario, I think the rest will fall in place. > > Thanks! > Andy--~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---