Master table without related child record

Having a bit of a braindead day, can anyone help with this. I have
three
models: Player, Game, Prediction (Player has_many :games, :through =>
:prediction)

I want a named_scope that finds games that the current player hasn’t
already
predicted.

I started with something like this:

named_scope :without_prediction, lambda { |player_id|
{
:select => “games., predictions.”,
:joins => “LEFT JOIN predictions ON predictions.game_id =
games.id”,
:conditions => “predictions.player_id IS NULL”
}
}

The problem is that this won’t work if ANY player has predicted that
game’s
result. So to be clear if there are games 1, 2 and 3 and players 10 and
11,
player 10 has predicted results for all 3 games and player 10 has only
predicted 1 and 2, I want a named_scope that returns game 3.

It seems like this is something I’ve done over and over again, but I
just
can’t get it clear in my head today.

Any ideas?

Cheers,

Andy


Andy J.
http://andyjeffries.co.uk/ #rubyonrails #mysql #jquery
Registered address: 64 Sish Lane, Stevenage, Herts, SG1 3LS
Company number: 5452840

On Tue, Apr 20, 2010 at 2:19 PM, Andy J. [email protected]
wrote:

Having a bit of a braindead day, can anyone help with this. I have three
models: Player, Game, Prediction (Player has_many :games, :through =>
:prediction)
I want a named_scope that finds games that the current player hasn’t already
predicted.

How about tackling it from the Player model like this

def unpredicted_games
Game.all - self.games
end

def unpredicted_games
Game.all - self.games
end

That’ll do me…

This is only a site for about 30-40 friends, so I’m not too bothered
about
efficiency.

Cheers,

Andy

On Apr 20, 1:19 pm, Andy J. [email protected] wrote:

{

change the join so that the condition is predictions.game_id =
games.id and predictions.player_id = …
and then change it so that the condition is predictions.id is NULL.
Also be careful when doing something like games., predictions. -
identically named columns will shadow each other (eg id) which can
lead to strange bugs

Fred