2010-03-13 7 views
1

Je suis novice en matière de rails et je me suis porté volontaire pour aider l'équipe locale de piste de lycée avec une base de données simple qui permet de suivre les performances des coureurs. Pour l'instant, j'ai trois modèles: Runners, Race_Data et Races. J'ai les associations suivantes.Associations ActiveRecord Question

Runners have_many Race_Data 
Races have_many Race_Data 

Je veux créer l'association Coureurs Have_Many Courses Grâce Race_Data, mais mon regard sur le schéma que je l'ai dessiné, il y a déjà beaucoup à une relation de Race_data aux courses. Est-ce que la combinaison de Runners ayant plusieurs Race_Data et Race_Data ayant une Race implique une relation Many_to_Many entre les Runners et les Races?

Répondre

1

La relation que vous décrivez est implicite, mais son utilisation implique un code plus complexe que nécessaire. Je pense que vous voulez quelque chose de plus comme

class Runner < ActiveRecord::Base 
    has_many :entries 
    has_many :races, :through => :entries 
end 
class Race < ActiveRecord::Base 
    has_many :entries 
    has_many :runners, :through => :entries 
end 
class Entry < ActiveRecord::Base 
# I suggest this is a more expressive name than "Race_Data" 
    belongs_to :runner 
    belongs_to :race 
end 

Cela devrait être suffisant pour faire des choses comme ceci:

bob = Runner.new(:name=>'Bob') 
joe = Runner.new(:name=>'Joe') 
race = Race.new(:race_date=>'20100313') 
race.entries.create(:runner=>joe, :position=>1) 
race.entries.create(:runner=>bob, :position=>2) 
bob.races.all #=> [#<Race id: 1, race_date: "2010-03-13"] 
bob.entries.all #=> => [#<Entry id: 2, runner_id: 1, race_id: 1, position: 2] 
+0

Mike, Merci pour votre excellente réponse. Aussi bonne suggestion sur l'utilisation des entrées au lieu de course_data. Jim – Mutuelinvestor

Questions connexes