Hi, I have two players playing a game.
The game has foreign keys into each player: player1_id, player2_id
From the Player model, I can get the opponent self played if I know
which
player self was, but I want to agnostically pull everyone that self has
played against, regardless of whether self was player1 or player2
I can get it with find_by_sql, but then my named scopes don’t work.
Really struggling to figure this out, looked at the guides, the api,
googled, and played around, and I’m running out of time and steam.
Also having difficulty getting the has_many to work with this. I thought
about a separate join table for it,and even got it working with
has_and_belongs_to_many :beat , :class_name => ‘Player’ , :foreign_key
=>
‘winner_id’ , :association_foreign_key => ‘loser_id’ , :join_table =>
‘games’ , :conditions => { :active => true }
But then I still had the same problem of selecting everyone played and
wasn’t sure how to deal with draws, and the game doesn’t know who is
player1
and who is player2, so I moved them into the game table.
googled, and played around, and I’m running out of time and steam.
It would be less effort for us to work out what you are trying to do
if you gave us the model relationships (belongs_to etc). Also if you
show the sql that works it would allow us to see what you mean.
It would be less effort for us to work out what you are trying to do
if you gave us the model relationships (belongs_to etc). Also if you
show the sql that works it would allow us to see what you mean.
Colin
Basically I want to say
Game < AR::Base
belongs_to :player1
belongs_to :player2
Player < AR::Base
has_and_belongs_to_many :players , :through => :games
end
And I want the current player to not care if it is player1 or player2
Here is the find_by_sql:
Player.find_by_sql “select * from players p where p.id in ( select
distinct
player1_id from games g where g.player2_id = #{self.id} ) or p.id in (
select distinct player2_id from games g where g.player1_id = #{self.id}
)”
Game < AR::Base
belongs_to :player1
belongs_to :player2
This will have to be something like
belongs_to :player1, :class_name => ‘Player’, foreign_key => player1_id
belongs_to :player2, :class_name => ‘Player’, foreign_key => player2_id
Player < AR::Base
has_and_belongs_to_many :players , :through => :games