Figuring out the relationships between models

Hi Guys,
I’m trying to come up with a model layout for a simple enough race
prediction app but am a little stuck. Basically, the app will allow
users to enter their predictions for a number of races (20 races in
total). When the races have been finished, I want to determine who
predicted all of the race winners correctly, who got 19/20, who got
18/20 etc.

Here’s a summary of the players and their relationships:

A User has one Betslip.
A Betslip has many Predictions (one Prediction for each of the 20
races).
Each Prediction consists of one Race and one Racer (the predicted-to-win
Racer).
Each Race has a number of Racers.
Each Race has one Winner (also a Racer).

This is where I’m getting a little confused.
Each Prediction consists of one Race and one Racer, but a Race also
consists of a number of Racers. A Race will also have one Winner (also a
Racer). It seems like there are three types of Racers - a general racer
(linked to a race), a predicted-to-win racer (linked to a prediction)
and a winning racer (linked to a race).

Would anyone have any advice on the best way to model this?
At the end of all of the races, the main thing I want to do is compare
each user’s betslip against the actual winners to see how many of their
predictions were correct.

Many thanks,
Eddie

Mr Horse wrote:

Hi Guys,
I’m trying to come up with a model layout for a simple enough race
prediction app but am a little stuck. Basically, the app will allow
users to enter their predictions for a number of races (20 races in
total). When the races have been finished, I want to determine who
predicted all of the race winners correctly, who got 19/20, who got
18/20 etc.

Here’s a summary of the players and their relationships:

A User has one Betslip.
A Betslip has many Predictions (one Prediction for each of the 20
races).
Each Prediction consists of one Race and one Racer (the predicted-to-win
Racer).
Each Race has a number of Racers.
Each Race has one Winner (also a Racer).

User has_one :betslip
Betslip belongs_to :user
Betslip has_many :predictions
Prediction belongs_to :betslip
Prediction has_one :race
Prediction has_one :racer
Race has_many :racers
Race has_one :winner, :through => :racers

Racers … Are separate? Unless each racer can only participate in one
race, in which case Racer belongs_to :race

I think that’s basically what you’re looking for.

Thanks for the advice Aldric. This approach makes sense, but I get a
little confused with the relationship between predictions and races.

A prediction has_one race, but does this mean that a race must belong_to
a prediction? While the first statement is correct (a prediction has_one
race), a race has many predictions associated with it. Is it possible to
state that a “race has_many predictions” as well as saying that a
“prediction has_one race”?

I could say that a race has_many predictions and a prediction belongs_to
a race, but it makes more sense to me to think of a prediction having a
race as opposed to the other way around (a prediction belonging to a
race).

Eddie

Mr Horse wrote:

Thanks for the advice Aldric. This approach makes sense, but I get a
little confused with the relationship between predictions and races.

A prediction has_one race, but does this mean that a race must belong_to
a prediction? While the first statement is correct (a prediction has_one
race), a race has many predictions associated with it. Is it possible to
state that a “race has_many predictions” as well as saying that a
“prediction has_one race”?

I could say that a race has_many predictions and a prediction belongs_to
a race, but it makes more sense to me to think of a prediction having a
race as opposed to the other way around (a prediction belonging to a
race).

Eddie

A horse is a horse, of course of course… Oh, sorry. I was distracted.

A prediction definitely doesn’t belong to a race :wink:
And a race doesn’t belong_to a prediction because there’s no foreign key
for prediction in the race, is there?

On 15 March 2010 16:48, Mr Horse [email protected] wrote:

Thanks for the advice Aldric. This approach makes sense, but I get a
little confused with the relationship between predictions and races.

A prediction has_one race, but does this mean that a race must belong_to
a prediction? While the first statement is correct (a prediction has_one
race), a race has many predictions associated with it. Is it possible to
state that a “race has_many predictions” as well as saying that a
“prediction has_one race”?

No, as neither model would have the foreign key column, see below.

I could say that a race has_many predictions and a prediction belongs_to
a race, but it makes more sense to me to think of a prediction having a
race as opposed to the other way around (a prediction belonging to a
race).

This is the right way to do it even though prediction belongs_to race
sounds a bit odd. The model that ‘belongs_to’ is the one with the the
foreign key (prediction has a column race_id in this case). You will
find that belongs_to often does not seem quite the correct way of
stating the relationship, but if the has_many seems right (race
has_many predictions) and each of the predictions (in this case) is
associated with one (race in this case) then that is the way to do it.

Colin

Thanks Colin,
I understand it a bit better now (this article also helped:
http://duanesbrain.blogspot.com/2006/05/ruby-on-rails-hasone-versus-belongsto.html).
The terms used in Rails to describe associations can be pretty
confusing.
Eddie

Colin L. wrote:

On 15 March 2010 16:48, Mr Horse [email protected] wrote:

Thanks for the advice Aldric. This approach makes sense, but I get a
little confused with the relationship between predictions and races.

A prediction has_one race, but does this mean that a race must belong_to
a prediction? While the first statement is correct (a prediction has_one
race), a race has many predictions associated with it. Is it possible to
state that a “race has_many predictions” as well as saying that a
“prediction has_one race”?

No, as neither model would have the foreign key column, see below.

I could say that a race has_many predictions and a prediction belongs_to
a race, but it makes more sense to me to think of a prediction having a
race as opposed to the other way around (a prediction belonging to a
race).

This is the right way to do it even though prediction belongs_to race
sounds a bit odd. The model that ‘belongs_to’ is the one with the the
foreign key (prediction has a column race_id in this case). You will
find that belongs_to often does not seem quite the correct way of
stating the relationship, but if the has_many seems right (race
has_many predictions) and each of the predictions (in this case) is
associated with one (race in this case) then that is the way to do it.

Colin

I guess my question is this: if you declare that ‘a has_one b’, is it a
requirement that you must also state ‘b belongs_to a’ (i.e. can you have
a ‘has_one’ without a corresponding ‘belongs_to’ ?). If this requirement
holds true and I state that a prediction has_one race, then I must also
state that a race belongs_to a prediction. I may be mistaken here, but
this wouldn’t allow me to retrieve all of the predictions associated
with a given race (and a race doesn’t really belong to a prediction).

Mr. Ed :slight_smile:

Aldric G. wrote:

Mr Horse wrote:

Thanks for the advice Aldric. This approach makes sense, but I get a
little confused with the relationship between predictions and races.

A prediction has_one race, but does this mean that a race must belong_to
a prediction? While the first statement is correct (a prediction has_one
race), a race has many predictions associated with it. Is it possible to
state that a “race has_many predictions” as well as saying that a
“prediction has_one race”?

I could say that a race has_many predictions and a prediction belongs_to
a race, but it makes more sense to me to think of a prediction having a
race as opposed to the other way around (a prediction belonging to a
race).

Eddie

A horse is a horse, of course of course… Oh, sorry. I was distracted.

A prediction definitely doesn’t belong to a race :wink:
And a race doesn’t belong_to a prediction because there’s no foreign key
for prediction in the race, is there?

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs